Individuaalprojekt
Projekt on üks lisatöö võimalus, mille eest võib teenida lisapunkte. Projekte esitatakse suulise eksamina. Selle tähtaeg on sisuliselt semestri lõpus, aga selle tegemiseks peab eelnevalt meiega kokku leppima ja seda muidugi mitte viimasel hetkel. Projekt võib olla referatiivne (ehk õppematerjali valmistamine) või eksperimentaalne/teaduslik.
Referatiivne või õppemetoodiline töö
Kui mõne teemakäsitlus siin aines ei meeldinud, siis palun näita meile, kuidas saaks paremini teha! Eesmärk on siin kirjutada õppematerjal mõne teema kohta, millest ideaalis oleks järgmise aasta tudengitele kasu. Väga teretulnud on ka paremate või alternatiivsete ülesannete ideed (koos testidega). Kui näed sellega ilusasti vaeva, siis on võimalik saada kuni 5 lisapunkti. Referaadi tuleb isiklikult suulises eksamis kaitsta, kus peab demonstreerima selle teema valdamist ja oma seisukohti/ettepanekuid lahti selgitama.
Eksperimentaalne või teaduslik töö
Projekti teemaks sobivad ka programmeerimiskeelte disain ja implementatsiooniga seotud probleemide uurimine. Äkki tead ise mõnda huvitavad programmeerimiskeelt või programmianalüüsi vahendit, mida tahaksid uurida? Kas tahaksid natuke AKTK keele kompilaatorit/interpretaatorit täiendada? Selliselt on samamoodi võimalik 5 punkti juurde teenida, kui oled teemat uurinud ja saad asjadest aru.
Meil on ka mõned keerulisemad teemad, millega võib eksamit asendada. Me arendame siin kahte analüsaatorit, mida võib uurida eksami projektidena.
- Põder: Java baitkoodi analüüs (kirjutatud Scalas).
- Goblint: C programmide analüüs (kirjutatud OCaml-is).
Java baitkood analüüsiks on meil sissejuhatav ülesanne olemas, aga selle iseseisev lahendamine on üsna raske. Seega paluks kohe meiega ühendust võtta, kui programmianalüüsi teema vastu on huvi!
AKT näidiskeele loomine (eksami asemel)
Võiks arvata, et meil on siin näidiskeeli piisavalt palju, aga tegelikult on väga palju programmeerimiskeelte omadusi, mida siin ei ole käsitletud. Pakume võimalust eksami tegemise asemel eksamiülesannet koostada! See on muidugi palju aeganõudvam kui eksamiks õppimine, aga tasub kaaluda siis, kui eksamit ei saa teha või vajad natuke suuremat väljakutset. Selle ülesanne lahendamiseks on vaja teha järgmist:
- Leida mõni programmeerimiskeele konstruktsioon, mida teistes näidiskeeltes ei esine!
- Oluline on mõelda abstraktse süntaksipuu peale: range nõue on see, et Sinu keeles esineb mõni AST klass, mille struktuur või tähendus erineb teiste omadest.
- See ei ole päris must-valge, vaid hinnatakse 20 punkti skaalas: kui on väga väike muudatus, siis võib ikkagi lahendada, aga saab selles kategoorias väga vähe punkte. Rohkem punkte saab, kui realiseerida huvitavama keele konstruktsiooni, näiteks massiive või kirjeid, erindeid, monaade, funktsioonikutseid või mõnda teist paradigmat.
- Loomingulisust piirab siin asjaolu, et keelte peab saama CMa peal käivitada (kui tahad lõviosa eest punkte saada). Selleks võib ka C masinale käske juurde lisada ja neid implementeerida.
- Tuleb teha meie järgmisest koodibaasist oma fork ja pull request järgmiste muudatustega.
- Juurkataloogi README.md faili lisada oma keele nimi, lühikese kirjelduse (mis keele konstruktsioon seal esineb) ja autori nimi.
- Kataloogi src/main/java lisada oma keele jaoks pakett ja sinna sisse lisada oma README.md fail, mis sisaldab AST klasside kirjelduse ja väike näide keele konkreetse süntaksi kohta.
- Kui võtame esimese pull requesti vastu, siis võib hakkata koostada selle jaoks ülesanne. See tähendab, et tuleb ise koostada kõik eksami praktilise osa komponente. Töö esitamiseks tuleb uuesti teha pull request, mida hindame järgmiselt.
- Korrektsed AST klassid (AbstractNode alamklassid). Selle eest saab kuni 20 punkti nagu üleval mainitud.
- Ülesanne kirjeldus (README.md). Selle eest saab kuni 10 punkti sõltuvalt teksti detailsusest ja arusaadavusest.
- Interpretaator, kompilaator ja parseri implementatsioonide eest võib saada sama palju punkte nagu eksamil.
- Siin saab aga punkte selle järgi, kui hästi on ülesanne tükeldatud erinevateks tasemeteks, mille jaoks on eraldi testid. Iga ülesanne kohta võiks olla 8 erinevat taset, kus iga taseme juures on paras arv kontrolle.
- Iga mõistlikult koostatud taseme eest, mida implementatsioon läbib, saab 1/8 selle ülesande eest antavatest punktidest.
- Kui on segane, kuidas peab üles ehitada, siis vaata Estologi näitel!
Tähtaeg on põhimõtteliselt eksamisessiooni lõpp, aga mõistlik oleks oma idee kõigepealt esitada, kuna see peab erinema ka teiste tudengite omadest ja loeb see järjekord, milles neid pull requeste on tehtud.