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
- teorin bakom och principerna för konstruktion och implementation av kompilatorer och andra översättare,
- detaljförståelse för mekanismerna i programspråk och hur en kompilator kan realisera dem
för att eleverna ska
- kunna modifiera en existerande översättare,
- med hjälp av verktyg konstruera en kompilator från ett givet programspråk till maskinkod eller ett annat programspråk.
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:
- Det är för mycket halvdokumenterad kod, dvs inte tillräckligt
bra kommenterad för att kunna få en överblick men för mycket dokumenterad för
att kunna få ut den väsentliga informationen angående allmänt om kompilatorer.
- Boken fungerade som bredvidläsningslitteratur. Allt som var viktigt gick Viggo
igenom på föreläsningarna. Man behövde därför bara läsa det man var intresserad av
eller inte förstod på föreläsningarna.
- För mycket rätt ointressant kod, för lite teori.
- Bra, men lite blajig . Kul med lite praktisk programmering.
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.
- Föreläsningarna kommer nära klassen på de legendariskt bra
föreläsarna på matte (Lasse Svensson, Krakus, Björner).
- Tyvärr tycker jag att det märks rätt tydligt att
kompilatorkonstruktion inte är föreläsarens huvudområde.
- För lite koppling till labbarna.
- Utmärkta föreläsningar. Föreläsningsanteckningarna är guld värda.
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%).
- Ganska svårt att fatta vad som ska göras i de olika labbarna. Lite väl mycket kodande.
För hårda krav för godkännande, optimala lösningar m.m. borde inte vara obligatoriskt.
- För det första tycker jag att labbpeken kom ut för sent. Eftersom alla labbar
bygger på varandra är det viktigt att alla kommer ut fort så man kan få en överblick
över vad man behöver göra.
Jag tycker också att man kunde styra upp labbarna så det inte tar så lång tid, visst
är det kul att alla har en frihet att göra sin kompilator som de vill, men jag tycker
personligen att det tar för mycket tid för att vara roligt.
- Hellre än att begränsa labben kunde man ge t.ex 3 poäng för den => 5 poängs kurs.
- Det är bra att man tvingas skriva en hel kompilator. Det är enda sättet att lära sig.
- Det är roligt att alla labbarna leder fram till ett gemensamt mål, som dessutom är
ett program som gör något vettigt! På det sättet är nog labbarna kursens stora behållning!
Möjligen borde man fundera på målspråket. Även om java är väldigt inne och så så verkar det
inte vara den ideala målarkitekturen.
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 var mycket lätt, vilket iofs uppvägs av att labbarna är ganska tunga.
- Tentan gick inte in allt för mycket på det "praktiska" planet
(struktar, c-kod etc) vilket är bra.
- En inspirerande tenta nästan lika kul som ASS-tentan.
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
- Den känns väl genomtänkt och planerad och ger en bra
förståelse för hur kompilatorer fungerar, skulle kunna
minska mer arbetet på labbarna bara.
Det är kul att alla labbar bygger på varandra så att
man får se helheten i kompilatorn.
- Det vore intressantare med en större kurs, så att det vore möjligt att hinna med labbarna
under kursen.
För många delar av kompilatorer hinner vi inte undersöka pga för kort tid.
Det vore MYCKET bättre med en större kurs.
- 4 poäng är lite för lite för den mängd
arbete som ligger nerlagt i labbarna MEN
kursen är en av de mest intressanta som
jag har följt ! Bra jobbat !
- Om exempelvis datorteknik ak, fk varit förkunskapskrav
kunde intressantare optimeringar illustrerats.
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
- Rand Waltzman kommer att ta över kursen nästa år.
- Kursboken kommer att bytas ut (se ovan).
- Labbkursen måste göras mindre.
Upp till kursomgångar.
Sidansvarig: <rand@nada.kth.se>
Senast ändrad 28 maj 1998
Tekniskt stöd: <webmaster@nada.kth.se>