Nada

Kursanalys för 2D1375, Programspråksimplementation, hösten 1996

Kursdata

Tid: period 1-2 läsåret 1996/97 dvs september-december 1996.
Poängantal: 4 (varav labb 2 poäng, tenta 2 poäng).
Tenta: ordinarietenta efter period 1 (24 oktober).
Föreläsningar: 28 timmar.
Labbar: en stor labb uppdelad i sju moment, 24 timmar schemalagd tid.
Kursledare och föreläsare: Viggo Kann.
Labbansvarig: Joachim Hollman.
Antal elever: 24, varav 17 från D, 1 från F, 4 från SU och 2 doktorander.
Kurslitteratur: Charles N. Fischer, Richard J. LeBlanc: Crafting a compiler with C.

Avklarade moment efter sista ordinarie redovisningstillfället 1997-01-22:

Tenta          22  (92%)
Labb           10  (42%)
Prestationsgrad:    67%
Examinationsgrad:   42%
Avklarade moment efter nästföljande läsår 1998-05-28:
Prestationsgrad:    85%
Examinationsgrad:   79%

Mål

Kursens mål är att ge för att eleverna ska

Förändringar inför denna kursomgång

Kursen gick för första gången. Jämfört med föregångaren Översättarteknik så har kursen en ny kursbok och en helt ny labbkurs.

Sammanfattning

Kompilatorkonstruktion är ett intressant område eftersom det innefattar så mycket datalogi, bland annat datastrukturer, algoritmer, formella språk och syntaxanalys, modularisering och programkonstruktion, programspråkskunskap, semantik, datornära programmering och minneshantering.

Det är både utmanande och tillfredsställande att undervisa en sån kurs, dels för att det är duktiga elever med höga förväntningar som läser kursen, och dels för att det ofta blir intressanta diskussioner om för- och nackdelar med olika språkelement och implementationsmetoder.

Labbkursen gick ut på att skriva en kompilator (för större delen av språket ADA/CS som definieras i appendix A i kursboken) som genererar kod för Javas virtuella maskin. Denna uppgift visade sig vara för omfattande i och med att det var så mycket programkod som måste skrivas. Dessutom publicerades inte specifikationen av Javas virtuella maskin förrän en månad efter att kursen startat, så vi visste inte hur mycket arbete som skulle krävas för kodgenereringen förrän det var för sent. Därför tvingades vi dra ner på labbkursens storlek i sista stund och göra kodgenereringen obligatorisk bara för den som ville ha högre betyg på labbkursen.

Faktiskt innehåll i kursen

Jag har gjort en beskrivning av kursens faktiska innehåll.

Omfattande dokumentation av kursen finns också tillgänglig på kursomgångens hemsida.

Elevernas synpunkter och kursledarens kommentarer

En enkät (16 svar, 67%) gjordes med ACE. Fullständigt resultat finns i WWW. Här följer en sammanfattning av enkätsvaren.

Kursinnehåll

Kursen ansågs vara medelsvår (44%) eller ganska svår (38%) av dom flesta. 95% fick i början av kursen klart för sig vad kursens mål var. Alla tyckte kursen var intressant och meningsfull, varav hälften tyckte den var mycket intressant och meningsfull.

Kurslitteratur

Kursboken fick ett blandat omdöme. Lika stora grupper ansåg den vara bra, hyfsad och mindre bra. 13% tyckte den vara dålig. Några kommentarer:
Jag har läst många böcker om kompilatorkonstruktion och Crafting a compiler är den som jag tycker passat bäst för kursen. Nu (våren 1997) har det äntligen kommit en ny bok, Modern compiler implementation in C, som verkar vara perfekt för kursen. Den kommer att användas nästa gång kursen går.

Undervisningen

Hälten gick på alla eller nästan alla föreläsningar. Resten (utom doktoranderna) gick på ungefär hälften av föreläsningarna. 81% ansåg att föreläsningarna var pedagogiskt bra, 13% att dom var acceptabla och en att dom var mindre bra.

Labben

Labben ansågs av dom flesta vara mycket intressant (44%) eller intressant (25%). Vad gäller labbens storlek tyckte dom flesta att den kunde begränsas något (63%) eller att den var alldeles för stor (19%).

Nedlagd labbtid

Labb   Medel    10%   25%   40%   50%   60%   75%   90%

1        2.4    1.0   1.0   2.0   2.0   2.5   4.0   4.0
2       11.8    5.0   8.0   8.0  10.0  10.0  16.0  30.0
3        6.8    2.0   4.0   6.0   7.0   7.0  10.0  11.0
4       17.1    9.0  10.0  12.0  20.0  20.0  25.0  25.0
5       12.3    3.0   4.0   4.0   6.0  10.0  10.0  40.0
6       22.2    4.0   6.0   6.0   8.0  40.0  40.0  45.0
7       58.8   40.0  40.0  40.0  75.0  75.0  80.0  80.0
8       15.0   15.0  15.0  15.0  15.0  15.0  15.0  15.0
x1       2.0    2.0   2.0   2.0   2.0   2.0   2.0   2.0

Tot    148.4   81.0  90.0  95.0 145.0 181.5 202.0 252.0
Labbdelen är 2 studiemedelspoäng, så labbarna borde ta 80 timmar. Som synes kommer bara 10% av eleverna inom den tiden! Även om tentan är lätt och inte motsvarar riktigt 2 poäng så är labbkursen alldeles för tung. Den måste minskas till nästa år.

Tentan

Tentan uppfattades av dom flesta eleverna som lätt, men ansågs spegla kursen bra eller mycket bra av nästan alla (82%). Tentan rättades på en dag och resultatet var extremt bra (16 fick betyg 5 och 6 fick betyg 4; ingen fick 3 eller underkänt). Jag tycker själv att tentan var lagom svår, och den var avsiktligt mer teoretisk än praktisk.

Allmänna elevkommentarer om kursen

Anpassning till andra kurser

Kursen bygger vidare på Artificiella språk och syntaxanalys. Eftersom jag höll den kursen också förra året så vet jag att det inte finns något överlapp och att kurserna följer naturligt på varandra. Tyvärr kan man inte använda samma kursbok i dom båda kurserna.

Närliggande kurser är Datorteknik ak (vad gäller maskinnära programmering), Datorsystemarkitektur (vad gäller optimering på maskinnära nivå) samt Semantik för programspråk (vad gäller korrektheten för kompilatorn).

Det är bra om eleverna har läst Datorteknik ak före Programspråksimplementation, men det är inte nödvändigt. Enda överlappet är med datorsystemarkitekturkursen när det gäller några optimeringsmetoder, men det är en mycket liten del av kursen, och dessutom drabbar det inte så många av eleverna.

Det finns ingen kurser som bygger på Programspråksimplementation, men det är många som är intresserade av att göra examensarbete inom området. Två av eleverna från kursen kommer i sommar att exjobba på ett nytt trädkodsformat som är en intermediär form som kan användas för att kompilera från flera språk och till flera datorarkitekturer.

Jämförelse med liknande kurser

Uppdelning av översättartekniken i dom två kurserna Artificiella språk och syntaxanalys och Programspråksimplementation är ovanlig ute i världen. Att översättartekniken på detta sätt får 7 poäng (8 från och med nästa år) gör att man hinner längre än på motsvarande kurser vad andra svenska tekniska högskolor; detta gäller både innehållsmässigt och laborativt.

Kursen är ganska lik den andra delen av kursen Computer Language Engineering på MIT, där man faktiskt också skapar en kompilator till Javas virtuella maskin.

Planerade förändringar

^ Upp till kursomgångar.


Sidansvarig: <rand@nada.kth.se>
Senast ändrad 28 maj 1998
Tekniskt stöd: <webmaster@nada.kth.se>