Konstrukcija kompilatora

I smer

Kurs Konstrukcija kompilatora je izborni kurs na četvrtoj godini I smera u okviru kojeg se proučavaju osnovni koncepti konstrukcije kompilatora (ili kompajlera, eng. compiler):

  • Semantička analiza
  • Optimizacija koda
  • Generisanje koda
  • LLVM infrastruktura
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnik:

Asistent:

Tekući rezultati

Tekuće rezultate možete pratiti preko naredne tabele.

Izborni predmet

  • 6 ESPB bodova
  • 2 časa predavanja
  • 3 časa vežbi

Završni ispit

  • teorija: 50 poena, radi se 60 minuta
  • zadaci: 50 poena, radi se 120 minuta
BITNO: Da bi se položio ispit, potrebno je da se ostvari najmanje 51 poen, od čega najmanje 20 poena na teoriji i najmanje 25 poena na zadacima.

Ispitna pitanja

Spisak ispitnih pitanja možete pronaći ovde. (Moguće su izmene u toku godine, proveriti spisak pitanja u maju.) U okviru ispita, izvlačite pet pitanja sa spiska ispitnih pitanja. Svako pitanje vredi 10 poena. Odgovarate pismeno. Teoriju možete polagati u istom roku sa praktičnim delom ispita (u istom terminu, odmah nakon završenog praktičnog dela) ili u nekom od narednih rokova, u terminima praktičnog dela ispita.

Teorijski deo ispita možete polagati i u toku godine, putem testova, u okviru regularnih termina predavanja. Jedan test je odgovaranje na jedno ispitno pitanje. Svako odogovara na pitanje koje izvuče. Test traje oko 15 minuta. Test nije obavezan, možete raditi test po izboru (tj testovi se međusobno ne uslovljavaju). Takođe, rezultati testa važe u svakom ispitnom roku. Ako položite, na primer, tri pitanja preko testova (npr prvo, drugo i četvrto) onda na ispitu polažete preostala dva (treće i peto). Rezultati testa su konačni, tj kako tu nema iznenađenja (ispitna pitanja su poznata u napred) onda nema ni ponavljanja polaganja istog ispitnog pitanja.

Primeri prakitčnog dela ispita

Seminarski rad

Seminarski rad menja praktični deo ispita ukoliko student to želi. Seminarski rad se radi u grupama od dva do četiri studenta. Maksimalan broj bodova koji se može osvojiti je 50, a za polaganje ispita je potrebno 25 poena. Seminarski rad se može braniti u jednom terminu u svakom ispitnom roku. Teme se dogovaraju sa predmetnim asistentom.

Materijali sa časova

Napomena: ovi materijali biće dopunjavani i menjani u toku godine.

Materijali sa časova

Snimci sa vežbi.

Virtuelna mašina za Konstrukciju kompilatora se može naći ovde.

Kratko uputstvo za podešavanje virtuelne mašine.

Skripta za skidanje unapred buildovane verzije projekta unutar VM-a.

Skripta za ručno buildovanje projekta. Postaviti je u direktorijum llvm-project, tj direktorijum koji ste dobili kada ste klonirali llvm repozitorijum.


Literatura za predavanja

Literatura za vežbe

  • C++: Klasa razlomak, C++ kroz primere, Saša Malkov (pdf)
  • Yacc-skripta, Filip Marić (pdf)
  • GNU programerski alati, Aleksandar Samardžić (pdf)
  • Skripta iz C++-a (pdf)
  • LLVM tutorijal (link)
  • Video materijali (link)

Treći test

Treći test biće održan 25. aprila u okviru predavanja, tj na prvom času. Test obuhvata ispitna pitanja vezana za semanitčku analizu tipova i izvršno okruženje, tj sa spiska ispitnih pitanja to su pitanja od 21 do 30 (uključujući i 21 i 30). Svako odgovara na pitanje koje izvuče. Test traje 15 minuta, a nakon toga imamo regularno predavanje.

Test nije obavezan, možete raditi naredni test ako niste radili ovaj ili ako niste radili prethodni (tj testovi se međusobno ne uslovljavaju). Takođe, rezultati testa važe u svakom ispitnom roku. Ako položite, na primer, tri pitanja preko testova (npr prvo, drugo i četvrto) onda na ispitu polažete preostala dva (treće i peto). Rezultati testa su konačni, tj kako tu nema iznenađenja (ispitna pitanja su poznata u napred) onda nema ni ponavljanja polaganja istog ispitnog pitanja.

20.04.2024.

Kviz na temu LLVMa

U okviru predavanja koje će biti održano 04. 04. održaćemo kratak kviz na temu LLVMa sa ciljem da prodiskutujemo teme koje nismo u potpunosti pokrili u okviru prethodnih predavanja. Pročitajte materijale sa slajdova kako biste što bolje odgovarali na ova pitanja!

29.03.2024.

Drugi test

Drugi test biće održan 11. aprila u okviru predavanja, tj na prvom času. Test obuhvata ispitna pitanja vezana za generisanje koda, za LLVM i za semanticku analizu dosega, tj sa spiska ispitnih pitanja to su pitanja od 10 do 20 (uključujući i 10 i 20). Svako odgovara na pitanje koje izvuče. Test traje 15 minuta, a nakon toga imamo regularno predavanje.

Test nije obavezan, možete raditi naredni test ako niste radili ovaj ili ako niste radili prethodni (tj testovi se međusobno ne uslovljavaju). Takođe, rezultati testa važe u svakom ispitnom roku. Ako položite, na primer, tri pitanja preko testova (npr prvo, drugo i četvrto) onda na ispitu polažete preostala dva (treće i peto). Rezultati testa su konačni, tj kako tu nema iznenađenja (ispitna pitanja su poznata u napred) onda nema ni ponavljanja polaganja istog ispitnog pitanja.

29.03.2024.

Gostujuće predavanje kompanije SYRMIA

Test za proveru znanja.
Utisci sa predavanja.

28.03.2024.

Gostujuće predavanje kompanije SYRMIA, četvrtak 28. 03. 2024. u 16h

U četvrtak 28. marta u 16h, Đorđe Todorović će održati predavanje o LLVM-u:

Projekat LLVM: Pregled

Ovaj sažeti prikaz pružiće dublji uvid u arhitekturu LLVM-a, ključne komponente i praktične primene. Tokom sesije, istražićemo teme kao što su međureprezentacija LLVM-a (IR), tehnike optimizacije i generisanja koda, pružajući uvid u to kako LLVM podstiče modernu izgradnju kompajlera i analizu programa. Pored toga, predstavićemo konkretne primere korišćenja LLVM-a u razvoju alata za validaciju automobilskog koda - Autocheck. Bez obzira da li vas ova tematika privlači ili ne, pridružite nam se za ovu informativnu prezentaciju kako biste otkrili osnovne principe i stvarni uticaj LLVM-a.

Projekat LLVM predstavlja modularnu implementaciju kompajlerske infrastrukture za razne programske jezike kao što su C, C++, Rust, Swift, i drugi. Prevodioci kao što su clang, rustc i swiftc važe za prevodioce koji generišu najbrži produkcijski kod u industriji i bazirani su baš na ekosistemu LLVM. Najveće kompanije kao što su Apple, Google, Facebook, Cisco i AMD su izabrale baš LLVM kao primarni prevodilac za svoje proizvode, a takođe veoma aktivno učestvuju u njegovom razvoju i poboljšanju. Izvorni kod projekta LLVM spada u porodicu otvorenog koda, i jedan je od najpopularnijih projekata na platformi GitHub.

Ako želiš da naučiš nešto novo o programskim prevodiocima zasnovanim na projektu LLVM, ovo predavanje je za tebe!

Ukratko o kompaniji SYRMIA

SYRMIA http://www.syrmia.com/ je softverska kompanija specijalizovana za razvoj ugrađenih sistema, fokusirana na sistemski softver u različitim oblastima, uključujući niske nivoe sistema, alate, kompajlere, emulatore, optimizovane okvire za mašinsko učenje, GPU softver, kao i razne softverske komponente korišćene u automobilskoj i potrošačkoj industriji. Kompanija je izrasla u tim od preko 200 visoko kvalifikovanih inženjera sa različitim iskustvima i pozadinama u Beogradu, Nišu, Novom Sadu i Banja Luci. SYRMIA ima raynovrsne klijente, počevši od malih startap kompanija do velikih igrača iz Silicijumske doline. Bez obzira da li su u pitanju krajnja rešenja, konsultantske usluge, podrška na lokaciji ili razvojni centar u blizini obale, fleksibilan pristup radu omogućava kompaniji SYRMIA da zadovolji sve potrebe klijenata.

Ukratko o predavaču: Đorđe Todorović

Đorđe Todorović je inženjer sa više od 9 godina iskustva u računarskoj industriji. Trenutno je vođa grupe "System Software" u kompaniji SYRMIA i uspešno vodi nekoliko timova, nesebično deli znanje, mentoriše sa mnogo strpljenja, a sve to uz osmeh i volju. Zahvaljujući svom doprinosu, postignućima i komentarima samih zaposlenih, izabran je za najboljeg inženjera 2023. godine u kompaniji SYRMIA. Diplomirao je i stekao master diplomu na Matematičkom fakultetu u Beogradu. Rodni grad mu je Požega, a živi i radi u Beogradu. Autor je raznih funckionalnosti i alata koji su sada deo projekta LLVM i koriste se naširoko, kako u industriji tako i u istraživačke svrhe. Svoj rad je prezentovao na raznim konferencijama kao što su LLVM Dev Meeting, FOSDEM, CGO (Code Generation and Optimization), i druge.

18.03.2024.

Prvi test

U četvrtak 21. 03. na prvom času biće održan prvi test koji obuhvata pismeno odgovaranje na jedno pitanje iz skupa ispitnih pitanja (u obzir dolaze prvih 9 ispitnih pitanja sa spiska ispitnih pitanja + naredno pitanje "Graal i GraalVM - osnovne karakteristike"). Svako odgovara na pitanje koje izvuče. Test traje 15-20 minuta, a nakon toga imamo regularno predavanje.

15.03.2024.

Utisci sa predavanja o Graal-u

Zamolila bih sve koji su prisustvovali ovom predavanju da popune narednu formu o utiscima sa predavanja. Za popunjavanje forme je potrebno oko 2 minuta. Forma je anonimna a informacije koje tu ostavite ću iskoristiti da donesem odluku da li da naredne godine oraganizujem predavanje sa istim predavačem. Takođe, odabrani komentari i utisci ce biti predočeni predavaču kako bi u skladu sa time mogao da poboljša svoja predavanja.

Hvala svima!

15.03.2024.

Test vezan za predavanje o Graal-u

Test

14.03.2024.

Prvi test i nagradni poeni

U četvrtak 14. 03. nakon predavanja koje će održati Boris Spasojević, imaćete priliku da odgovarate na pitanja (putem google forme). Pitanja će biti vezana za gradivo predavanja i studenti koji tačno odgovore dobiće dodatne poene. Nakon predavanja koje će održati Boris, imaćemo regularno predavanje.

U četvrtak 21. 03. na prvom času biće održan prvi test koji obuhvata pismeno odgovaranje na jedno pitanje iz skupa ispitnih pitanja (u obzir dolaze najverovatnije prvih 11 ispitnih pitanja sa spiska ispitnih pitanja + pitanje vezano za predavanje 14. 03. koje će biti definisano sledeće nedelje). Svako odgovara na pitanje koje izvuče. Test traje 15-20 minuta, a nakon toga imamo regularno predavanje.

Test nije obavezan, možete raditi naredni test ako niste radili ovaj (tj testovi se međusobno ne uslovljavaju). Takođe, rezultati testa važe u svakom ispitnom roku. Ako položite, na primer, tri pitanja preko testova (npr prvo, drugo i četvrto) onda na ispitu polažete preostala dva (treće i peto). Rezultati testa su konačni, tj kako tu nema iznenađenja (ispitna pitanja su poznata u napred) onda nema ni ponavljanja polaganja istog ispitnog pitanja.

10.03.2024.

Gostujuće predavanje Oralce Labs, četvrtak 14. 03. 2023. u 16h

U četvrtak 14. marta u 16h, Boris Spasojević će održati predavanje

Uloge kompajlera Graal u GraalVM-u

GraalVM je skup tehnologija okupljenih oko Java Virtuelne Mašine koje omogućavaju izvršavanje koda pisanog u raznim programskim jezicima (Java, Scala, Kotlin, JS, Python, Ruby, itd.) sa fokusom na visokim performansama. U korenu GraalVM se nalazi Graal - kompajler pisan u Javi koji se koristi na nekoliko različitih načina: Kao JIT kompajler za HotSpot JVM, kao AOT kompajler za JVM bajtkod i kao JIT kompajler za dinamičke jezike poput JavaScript-a, Python-a i Ruby-a. U ovom predavanju ćemo proći kroz razne mogućnosti GraalVM-a sa fokusom na to kako ih Graal omogućava.

Ukratko o Oracle Labs

Oracle Labs je deo komapnije Oracle koji se bavi razvojem i istraživanjima. To je mesto gde se istraživači i inženjeri okupljaju kako bi ponovo zamislili osnove računarstva. Ekspertiza u proizvodnji hardvera i softvera pozicionirala je Oracle labs kao vodeću laboratoriju za industrijsko istraživanje za kreiranje tehnologija koje imaju kapacitet da radikalno promene postojeće paradigme računarske nauke. Oracle labs radi na ovom cilju svakog dana na lokacijama širom sveta, uključujći Beograd.

Ukratko o predavaču: Boris Spasojević

Boris Spasojević je vodeći istraživač (Principal Researcher) u Oracle Labs-u, koji radi na GraalVM-u. Njegovo istraživanje je usredsređeno na kompajlerske optimizacije za statičke i dinamičke jezike, razvoj alata za programere kao i alate za razvoj programskih jezika. Boris je doktorirao na Univerzitetu u Bernu na temu programerskih alata svesnih softverskog ekosistema.

29.02.2024.

Početak semestra

Svim studentima želimo veseo i uspešan prolećni semestar!

17.02.2024.

Matematički fakultet, Univerzitet u Beogradu
školska 2019/20. godina