IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Programmer som data 
Kursusnavn (engelsk):Programs as Data 
Semester:Efterår 2012 
Udbydes under:Bachelor i softwareudvikling (bswu) 
Omfang i ECTS:7,50 
Kursussprog:Dansk 
Kursushjemmeside:https://learnit.itu.dk 
Min. antal deltagere:12 
Forventet antal deltagere:60 
Maks. antal deltagere:70 
Formelle forudsætninger:Betydelig programmeringserfaring og solid beherskelse af Java og C#, samt kendskab til F# eller Standard ML. Erfaring med programmers tids- og pladsforbrug. Det er en fordel sideløbende at følge kurset Operativsystemer og C.

---
Dette kursus indgår på femte semester af bacheloruddannelsen i softwareudvikling og koordineres med det parallelle kursus Operativsystemer og C. 
Læringsmål:Efter dette kursus skal du

* Kunne analysere og forklare tidsforbrug og pladsforbrug for et
program skrevet i Java, C#, C og et dynamisk programmeringssprog,
baseret på en forståelse hvordan sprogene er implementeret,
herunder hvilken rolle lageradministration og spildopsamling
spiller; og kunne bruge denne forståelse til at vurdere fordele og
ulemper ved at anvende en given sprogkonstruktion i en given
situation (fx objekttype versus værditype i C#).

* Kunne benytte værktøjer effektiv genkendelse af regulære udtryk,
til leksikalsk analyse og til syntaksanalyse; kunne forklare
begrænsningerne i disse værktøjer med brug af relevante teoretiske
begreber; samt kunne vælge de mest relevante værktøjer til løsning
af en foreliggende genkendelsesopgave.

* Kunne designe repræsentationer af abstrakt syntaks for et givet
problem, i et funktionelt såvel som et objektorienteret sprog;
kunne benytte værktøjer til at opbygge abstrakt syntaks ud fra
tekstuelle inddata; og kunne benytte rekursion til analyse og
transformation af abstrakt syntaks, for eksempel typeanalyse,
oversættelse, eller reduktion af logiske eller aritmetisks udtryk.

* Kunne sammenligne udtrykskraft og effektivitet for forskellige
programmeringssprog (især Java, C#, C og dynamisk typede sprog), og
forklare hvordan deres egenskaber følger af designbeslutninger og
implementationsteknikker bag sprogene.

* Kunne vise hvordan et program både kan anskues som aktiv skaber af
dynamisk opførsel (programkørsler) og som passive data der kan
analyseres, transformeres eller genereres af andre programmer.

* Kunne forklare hvordan et givet nyt programmeringssprog forholder
sig til kendte sprog. 
Fagligt indhold:* Leksikalsk analyse, regulære udtryk, endelige tilstandsmaskiner,
ikke-deterministiske og deterministiske tilstandsmaskiner,
lexer-generatorer.

* Syntaksanalyse, top-ned versus bund-op, LL versus LR,
parser-generatorer.

* Stakmaskiner, evaluering af udtryk, Postscript, mellemkode for en
simpel stakmaskine.

* Oversættelse af en delmængde af C (*p, &x, pointer-aritmetik,
arrays, arr[i]) til stakmaskinkode.

* Typetjek, typeinferens, statisk typede sprog, dynamisk typede
sprog.

* Maskinmodellen bag Java, C#, F# (stak, hob, spildopsamling), og
oversættelse fra kildetekst til stakmaskinkode.

* Mellemkodesprogene i Java Virtual Machine og Common Language
Infrastructure, og deres implementation med generering af
registermaskinkode på køretid.

* Spildopsamlingsteknikker (garbage collection).

* Funktionsprogrammering med Scheme, abstrakt syntaks som konkret
syntaks.

* Continuations, exceptions, og en fortolker for en delmængde af
Icon. 
Læringsaktiviteter:12 forelæsninger og 12 øvelsesgange

---
Dette kursus indgår på femte semester af bacheloruddannelsen i softwareudvikling og koordineres med det parallelle kursus Operativsystemer og C.
Det samlede studieforløb er beskrevet her: Bachelor softwareudvikling  

Eksamensform og -beskrivelse:X. experimental examination form (7-scale; external exam), 7-trins-skala, Ekstern censur

I dette kursus skal de studerende gennemføre obligatoriske aktiviteter, som skal opfyldes for at blive indstillet til eksamen og evt. for at kunne aflevere skriftlig arbejde til eksamen.

Der stilles 11 ugeopgaver til løbende aflevering (se frister på kursushjemmesiden) og godkendelse; det er en forudsætning for at gå til eksamen at 9 af disse opgaver er godkendt.

Obligatoriske opgaver skal være afleveret allersenest fredag d. 30. november 2012 kl. 15:00. Ellers annulleres tilmeldingen til eksamen.

Skriftlig eksamen varer 4 timer.  

Litteratur udover forskningsartikler:* Kursets lærebog er Peter Sestoft: Programming Language Concepts. Springer 2012. Se http://www.itu.dk/people/sestoft/plc/
* Desuden bruges to kapitler fra Torben Mogensen: Introduction to Compiler Design. Springer 2011, eller tidligere udgave http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/
* Endvidere kan det være nyttigt med materialer om F#, fx Michael Hansen & Hans Rischel: Functional programming with F#, draft 2012, Danmarks Tekniske Universitet, eller lignende. 
 
Afholdelse (tid og sted)
Kurset afholdes på følgende tid og sted:
UgedagTidspunktForelæsning/ØvelserStedLokale
Mandag 10.00-11.50 Øvelser ITU 2A12
Mandag 12.00-13.50 Forelæsning ITU Aud 3
Mandag 14.00-15.50 Forelæsning ITU Aud 3

Eksamen afholdes på følgende tid og sted:
EksamensdatoTidspunktEksamenstypeStedLokale
2013-01-03 Tidspunkt oplyses senere Skriftlig eksamen ITU 3A12,3A14,3A18