Nada

Programspråksimplementation, Läsåret 04/05

Författare: Lars Engebretsen, NADA

Kursanalys

Kursdata

Kurs2D1375, Programspråksimplementation, 4p
ExaminationTentamen (2p), Laboration (2p)
Kursen genomfördHT 2004
Föreläsningar3 timmar (2 tillfällen)
Kurslitteratur Appel, Modern compiler implementation in Java, second edition
Antal registrerade studenter31 nya, 2 gamla
Kursansvarig/föreläsareLars Engebretsen

Mål

Kursens mål är att ge: 1) teorin bakom och principerna för konstruktion och implementation av kompilatorer och andra översättare, 2) detaljförståelse för mekanismerna i programspråk och hur en kompilator kan realisera dem, 3) förmåga att konstruera översättare från en notation till en annan; för att studenterna ska kunna 1) modifiera en existerande översättare, 2) med hjälp av verktyg konstruera en kompilator från ett givet programspråk till maskinkod eller ett annat programspråk.

Examination

Kursen examineras med laborationer och muntlig tentamen. Studenterna kan själva bestämma sitt betyg genom att göra olika många laborationer; betyget fastställs sedan efter godkänd muntlig tentamen.

Nyckeltal

Per 2005-03-31 har totalt tjugo studenter klarat kursen; sju med betyg 3, tre med betyg 4 och tio med betyg 5. Eftersom kursen är en läskurs är det svårt att uppskatta hur många som har gått den. Jag vet att några studenter inte hann klart med laborationerna i tid; jag vet också att några av de registrerade studenterna aldrig började arbeta med kursen.

Eftersom studenterna tenterar när de har gjort sina laborationer blir de godkända på båda kursmomenten samtidigt. Därför är examinations- och prestationsgraden per definition 100%. Som andel av antalet nyregistrerade studenter är examinations- och prestationsgraden ungefär 65%.

Utvärdering och kommande förändringar

Kursen hade i år nytt innehåll, vilket rent konkret innebar att de flesta studenterna producerade en färdig kompilator. Studenterna kunde själva välja vilket betyg de fick genom att välja ambitionsnivån på sitt programmeringsprojekt. De som fick betyg 5 skrev en kompilator för SPARC. Jag hade designat ett lättare spår för dem som vill satsa på betyg tre: de skrev en kompilator med Javas virtuella maskin som mål. Det fungerade överlag bra, några studenter valde denna lättare väg och verkar ha uppskattat den.

En annan nyhet för i år var en föreläsning mitt på terminen med tillfällen för frågor och diskussion. Studenterna tyckte att den fungerade mycket bra och att det vore bra med ytterligare än sådan föreläsning i månadsskiftet november/december. Jag tror också att det vore bra. De flesta hade hunnit börja med den första fasen i kompilatorn, bokens kapitel 7, till årets enda föreläsning; en ytterligare föreläsning skulle kunna ge mer stöd och vägledning till de senare kapitlen i boken.

I samband med den muntliga redovisningen intervjuade jag studenterna. Det kom då fram att alla tyckte att kursen var trevlig och mycket givande, om än arbetsam. De flesta ansåg att kursen var väl värd sina fyra poäng; de ansåg också att kompilatorprojektet var det största projekt de gjort på KTH, möjligen oräknat projektkursen i årskurs 3. Någon enstaka hade lagt ner omkring tre veckor heltid på kursen; de flesta ansåg att de lagt ner drygt fyra veckor. De som arbetade själva med projektet hade generellt lagt ner lite mer tid än de som arbetade i grupp. Det fungerade för de flesta relativt bra att arbeta i självstudieform.

Överlag tyckte studenterna bättre om boken än tidigare år; kanske beror det på att de har haft den som kursbok i 2D1373 (Artificiella språk och syntaxanalys). En student sade ungefär att »man både älskar den och hatar den», vilket jag tror sammanfattar den genomsnittliga åsikten.

Till nästa år bör det tydligt påpekas i kurs-pm att det finns ett ganska stort antal testfall i kurskataolgen. Dessa testfall utvecklades under årets kursomgång. Kanske borde studenterna också styras lite mer. Till exempel finns det egentligen ingen anledning att lägga ner tid på att hitta de mest optimala sekvenserna av assemblerinstruktioner vid kodgenereringen, det viktigaste är att generera kod som fungerar. Det är inte heller nödvändigt att använda någon avancerad graffärgningsalgoritm för registerallokeringen. Man bör också uppmuntra studenterna att använda Javas inbyggda abstrakta datatyper för funktioner (dvs avbildningar), mängder, vektorer och liknande istället för Appels listor. Kanske bör man också se över kriterier för betygssättning och införa fler möjligheter på muntan än bara G och&npsp;U.

^ Upp till kurssidan.


Sidansvarig: <enge@nada.kth.se>
Senast ändrad 2005-03-31.
Tekniskt stöd: <webmaster@nada.kth.se>