Projekt
Eksamit võib asendada lõpuprojektiga, kui aine on muus osas selge ja kodutöödest on saadud vähemalt 91 punkti. Projekti raames tuleb kas midagi valmis programmeerida ja/või mõnest olemasolevast süsteemist aru saada ning anda sellest kirjalik ülevaade. Projekti sooritamiseks tuleb meiega eelnevalt kokku leppida. Projekte esitatakse suuliselt eksamisessiooni ajal. Projekt võiks olla raske/huvitab, aga mahu poolest võrreldav eksamiks õppimisega.
Teemad
Projekti teemaks sobivad kõik keelte disain ja implementatsiooniga seotud probleemide lahendamine. Näiteks sobivad järgmised teemad:
- Domeenspetsiifilise keele leiutamine ja implementeerimine. Inspiratsiooni võite saada Columbia ülikooli projektidest (2012 ja 2013).
- IntelliJ või Eclipse plug-in mõne olemasoleva keele toetamiseks. Võib ka uurida IDE erinevaid võimalusi, näiteks refaktoriseeerimine, koodianalüüs või IntelliJ Nullable annotatsioonid.
- Parsimise tehnoloogia uurimine. On väga palju teisi parsimise meetodeid ja siin võib ka loomuliku keele parsimise ja töötlemise teemasid uurida. Üks huvitab teema on näiteks Scala ja Haskelli parser-kombinaatorite võrdlemine.
- Koodi analüüs ja testimise vahendid. Kõige lihtsam on arvatavasti analüüsida või teisendada Pythoni koodi.
- Programmianalüüs on üks valdkond, kus võime ka pakkuda tõsisemad teadusteemad. Me arendame koos Müncheni tehnikaülikooliga analüsaatorit Goblint. AKT aine raames võib alustada analüüsi teooria või praktiliste raamistikedega tutvumist.
- Meid huvitab ka igasugune koodi verifitseerimine. Võib uurida erinevaid süsteeme, näiteks Contracts for Java või KeY project. Kõik teemad Vesali formaalmeetodite kursusest on võimalik siin uurida.
- Dünaamilise analüüs ja baitkoodi töötlemine. Siin võib lisaks ASM'ile ka uurida AspectJ ja natuke uuemad raamistikud, näiteks DiSL.
- Baitkoodi töötlemise temaatikas on üks väga konkreetne teema, mis on väga huvitab nii teaduslikult kui ka praktiliselt, aga see nõuab teatud ambitsioonikust. Meie doktorant Nikita (firmast Plumbr) on implementeerinud profileerijate jaoks kontekstkodeerimist, aga see vajab natuke optimeerimist! Siin tuleks vähemalt implementatsiooniga tutvuda ja mõelda välja, kuidas seda kiiremaks saada. Seda projekti võiks siis bakalaureuse töö raames jätkata.
- ... ja palju muud.
Milleks teha projekt?
Peamine eelis on teha midagi huvitavamat kui järjekordne käsitsi parser. Hea oleks sellise teema valida, millega saab bakalaureuse tööna edasi arendada. Kindlasti ei tasu projekti teha, kui programmeerimiskeelte temaatika ei huvita.