IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Programmer som data 
Kursusnavn (engelsk):Programs as Data 
Semester:Efterår 2013 
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 til 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 (.NET, Mono), 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.

* Eventuelt andre nye programmeringssprog, såsom Scala. 
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  

Obligatoriske aktivititer: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 [relevant 2013-frist, pt ukendt]. Ellers annulleres tilmeldingen til eksamen. 
Eksamensform og -beskrivelse:X. experimental examination form (7-scale; external exam), 7-trins-skala, Ekstern censur

Take-home written exam/micro-project
- Individual
- Start at 0900 on Thursday 2 Jan 2014
- End at 1400 on Friday 3 Jan 2014
- All materials, compilers, and so on, including Internet access, allowed
- Plagiarism or copying of solutions not allowed. No oral exam

More information about the hand-in form later (paper or digital)  

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, til referencebrug, materialer om F#, fx Michael Hansen & Hans Rischel: Functional Programming with F#, Cambridge University Press 2013, eller lignende. Se http://www2.imm.dtu.dk/~mire/FSharpBook/
 
Afholdelse (tid og sted)
Kurset afholdes på følgende tid og sted:
UgedagTidspunktForelæsning/ØvelserStedLokale
Mandag 10.00-11.50 Forelæsning ITU Aud. 3
Mandag 12.00-13.50 Øvelser ITU Aud. 3 og 2A54
Mandag 14.00-15.50 Øvelser ITU 2A54

Eksamen afholdes på følgende tid og sted:
EksamensdatoTidspunktEksamenstypeStedLokale
2014-01-02 29-timers opgave - Se mere info i Eksamensform Skriftlige arbejder ITU Lokale oplyses senere
2014-01-03 29-timers opgave - Se mere info i Eksamensform Skriftlige arbejder ITU Lokale oplyses senere