IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Programmer som data 
Kursusnavn (engelsk):Programs as Data 
Semester:Efterår 2017 
Udbydes under:Bachelor i softwareudvikling (bswu) 
Omfang i ECTS:7,50 
Kursussprog:Dansk 
Kursushjemmeside:https://learnit.itu.dk 
Min. antal deltagere:
Forventet antal deltagere:
Maks. antal deltagere:75 
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. 
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 af 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. 
Læringsaktiviteter:14 ugers undervisning bestående af forelæsninger og øvelser

Forelæsninger giver et teoretisk fundament ved at gennemgå centrale begreber, teknikker og eksempler. Det forventes, at de studerende har læst den tekst, som forelæsningen bygger på, således at en god dialog kan gennemføres.
De obligatoriske afleveringsopgaver skal sikre en aktiv forståelse af begreber og teknikker. Dette sikres gennem et mix af små og lidt større kodeopgaver samt mindre skriftlige besvarelser. Kurset anvender ikke større projektopgaver. Alle opgaver forventes besvaret i grupper af to. 

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.

Antal: Der stilles 10 ugeopgaver med en værdi af 2 point hver. En total af 20 points kan opnås. Du skal have 14 point for at gå til eksamen.

Hvornår: 1 opgave hver uge.

Deadlines: 1 uge per opgave.

Genaflevering: Det er muligt at genaflevere inden 2 uger efter første deadline. Det tager i snit en uge at rette en opgave, så der er op til en uge til at forbedre opgaven.

Dato for aflevering af obligatoriske opgaver vil fremgå af kursets side på LearnIT.

OBS! studerende, der ikke opfylder betingelserne for at gå til eksamen vil blive registreret med NA (ikke godkendt) ved den ordinære eksamen og vil bruge et prøveforsøg. 
Eksamensform og -beskrivelse:C: Skriftlige arbejder uden mundtlig eksamen., (7-scale, external exam)

Individuel skriftlig besvarelse af Take-home opgave/mikro projekt.
Tidspunkt for udlevering og aflevering af opgaven vil fremgå på kursets side på LearnIT.
De studerende har 28 timer til at besvare opgaven.
Alle hjælpemidler, compilers etc. inklusiv internet adgang er tilladt.
Plagiat og kopiering af løsninger er ikke tilladt. Der indgår ikke nogen mundtlig prøve i eksamen.

Umiddelbart efter aflevering vil der gennemføres tjek for eksamenssnyd på 20% af de studerende, der har deltaget I prøven.
De studerende udvælges tilfældigt af eksamenskontoret. Navnene på de udtagne lægges på kursets side på LearnIT. De udtagne studerende skal møde op på ITU til kontrol. Det præcise tidspunkt og sted vil blive offentliggjort på kursets side på LearnIT.  

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/. 
 
Undervisere
Følgende personer underviser på kurset:
NavnStillingUndervisertypeIndsats (%)
Peter Sestoft Institutleder(ITU) Kursusakademisk ansvarlig 5
Niels Hallenberg Ekstern lektor(ITU) Kursusansvarlig 95
Niels Roesen Abildgaard Hjælpelærer(ITU) Hjælpelærer 0
Thor Valentin Aakjær Nielsen Olesen Hjælpelærer(ITU) Hjælpelærer 0
Ahmad Salim Al-Sibahi Postdoc(ITU) Underviser 0