====== MSc Fordítóprogramok ====== == Tananyag == * Flex, Bison, C++: [[https://github.com/devaigergely81/flex-bison-example|1. példaszoftver]] * [[mscfordprog:flexbisongyak|gyakorlati feladatok]] * Regiszterallokáció: [[https://www.cs.cmu.edu/afs/cs/academic/class/15745-s02/www/lectures/lect-regalloc.pdf|diasor]], [[https://hu.wikipedia.org/wiki/Gr%C3%A1fok_sz%C3%ADnez%C3%A9se|gráfszínezés]], [[mscfordprog:regalloc|példa]] * Kódoptimalizáció: [[https://deva.web.elte.hu/mscfordprog/kodopt.pdf|diasor]] [[https://www.cs.cmu.edu/afs/cs/academic/class/15745-s02/www/lectures/lect3.pdf|gráfépítés]] [[https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html|gcc példák]] * Xtext: [[https://github.com/djnemeth/sm/|2. példaszoftver]] * [[mscfordprog:xtextgyak|gyakorlati feladatok]] * [[https://www.slideshare.net/szarnekow/textual-modeling-framework-xtext|Xtext bevezető]] * [[https://www.slideshare.net/yashskullfox/xbase-implementing-specific-domain-language-for-java|Xbase és Xtend bevezető]] * [[https://www.eclipse.org/xtend/documentation/202_xtend_classes_members.html|Xtend dokumentáció]] * [[https://www.eclipse.org/modeling/emf/docs/presentations/EclipseCon/EclipseCon2004_Rapid_Development_Using_EMF.pdf|EMF (kiegészítő anyag érdeklődőknek)]] * Szemétgyűjtő algoritmusok * [[https://www.slideshare.net/achinth/garbage-collection-algorithms|diasor]] * [[https://www3.nd.edu/~dthain/courses/cse40243/spring2006/gc-survey.pdf|cikk]] * [[http://java.ociweb.com/mark/other-presentations/JavaGC.pdf|Java szemétgyűjtés (1-18. slideok)]] * Just In Time Compilation (JIT) * [[http://hpac.rwth-aachen.de/teaching/sem-accg-16/slides/04.Khan-JIT.pdf|diasor]] ([[https://www.geeksforgeeks.org/tail-call-elimination/|tail call elimination]], [[https://marcofoco.com/the-power-of-devirtualization/|devirtualization]], [[http://wiki.c2.com/?VarargsCollectionFactoryMethod)|Varargs Collection Factory Method]], [[https://en.wikipedia.org/wiki/Loop_inversion|loop inversion]], [[https://books.google.hu/books?id=5gVqCQAAQBAJ&pg=PA294&lpg=PA294&dq=loop+versioning&source=bl&ots=tGeWmQnrSD&sig=ACfU3U26po62tVoklsl_jMXG9N9BoNhuKg&hl=hu&sa=X&ved=2ahUKEwjel7yai4_hAhXykosKHYXsAq8Q6AEwBnoECAcQAQ#v=onepage&q=loop%20versioning&f=false|loop versioning]], [[https://en.wikipedia.org/wiki/Partial_redundancy_elimination|partial redundancy elimination]], [[https://arxiv.org/pdf/1711.03050.pdf|dynamic deoptimization]]) * Nyelvbeágyazás: [[https://github.com/devaigergely81/haskell-edsl-example|3. példaszoftver]] * [[mscfordprog:edslgyak|gyakorlati feladatok]] * Gráfredukció * [[https://en.wikibooks.org/wiki/Haskell/Graph_reduction|segédanyag]] * [[https://crypto.stanford.edu/~blynn/haskell/grr|példák]] * [[https://wiki.haskell.org/Performance/Strictness|strictness analysis]] * [[http://www.cs.cmu.edu/afs/cs/academic/class/15745-s13/public/lectures/L13-SSA-Concepts-1up.pdf|SSA]], [[http://www.cs.cmu.edu/afs/cs/academic/class/15745-s15/public/lectures/L6-LLVM2-1up.pdf|LLVM]] == Vizsgatematika == * Hagyományos fordítóprogramok * Fordítási és futási idő, fordítás lépései, forrás- és tárgykód * Lexikális- és szintaktikuselemző-generátorok, környezetfüggetlen nyelvtan és akciókódok * Szintaxisfa, szimbólumtábla, szemantikus értékek * Assembly, kódgenerálási szabályok * Interpretálás * Értéktábla vs. szimbólumtábla * Interpretálás és szintaxisfa kapcsolata * Nyelvi konstrukciók végrahajtási szabályai * Bájtkód és virtuális gép fogalma * JIT * Célja, előnyei, hátrányai * Profilozás fogalma, célja a JIT technológiában * Hot spot fogalma * Kódoptimalizálás * Kódoptimalizáció fajtái és céljai * Lokális optimlizáció * Alapblokk fogalma * Azonos kifejezések többszöri kiszámításának elkerülése * Gráfépítés alapblokk utasításaiból, címkézés, memóriába írás hatása * Gráf leképezése optimalizált kóddá * Ablakoptimalizálás * Globális optimalizáció * Regiszterallokáció * Virtuális regiszterek fogalma és ezeket használó kódgenerálási szabályok * Regiszterallokáció feladata * Ekvivalens gráfszínezési feladat, a feladat bonyolultsága, interferenciagráf * Gráfszínezés megoldása, heurisztikák * Kromatikus szám és fizikai regiszterszám, memóriában tárolás regiszter helyett * Vezérlésfolyam gráf fogalma * Cikluskifejtés, erős redukció, elágazásokkal kapcsolatos transzformációk * LLVM * SSA fogalma, Phi függvény * LLVM frontend, backend, transzformációk, Pass manager * szerializált formátumok * LLVM API, iterátorok, visitor pattern * Nyelv-implementációs keretrendszerek * DSL, belső és külső DSL fogalma * Elvárt IDE szolgáltatások * Eclipse technológiák * Xtext, Xbase, EMF/Ecore, Xtend lényege és összefüggései * Xtext nyelvtan és kiterjesztései, automatizált szintaxisfa-építés * Szemétgyűjtés * Célja, előnyei és hátrányai * Hivatkozásszámlálás módszere és korlátai * Jelölő-kisöprő algoritmus, memőriatöredezettség * Másoló szemétgyűjtés, szükséges memőriatöbblet * Generációs szemétgyűjtés * Java által használt megoldások * Nyelvbeágyazás * Sekély és mély beágyazás; interpretálás és fordítás lehetőségei * Haskell technológiák * Monádok, GADT, Num osztály szerepe a nyelvbeágyazásban * Funkcionális nyelvek végrehajtása * Redex, normálforma, legbelső és legkülső redex * Lusta kiértékelés, összefüggés a nyelv szemantikájával * Term- és gráfátírás * Részkifejezések megosztása és tisztaság