Ing. Petr Máj, Ph.D.

Závěrečné práce

Bakalářské práce

Serializace funkcí a prostředí v jazyku R

Autor
Michal Vácha
Rok
2017
Typ
Bakalářská práce
Vedoucí
Ing. Petr Máj
Oponenti
Ing. Petr Špaček, Ph.D.
Anotace
Tato bakalářská práce je součástí větší snahy, a to udělat kód napsaný v R spolehlivější a lépe udržovatelný. K tomu byl vytvořen nástroj pro automatické generování testů, Genthat. Jeho cílem je trasovat volání funkcí a z těchto záznamů následně vytvořit sadu testů. Aby to bylo možné, je nutné, aby Genthat uměl serializovat libovolný objekt, který může funkce v R přijímat jako parametr nebo vracet. R je funkcionální jazyk, a proto se v něm často používají closures. To jsou funkce, které zachytávají kontext, kde byly vytvořeny. Tyto funkce nebyly dříve v Genthatu podporovány a mým úkolem bylo přidat jejich podporu. Mimo to jsem vylepšil i ostatní části, konkrétně serializaci výrazů a čitelnost výsledných testů.

Implementace vyhodnocovače lambda výrazu

Autor
Jan Liam Verter
Rok
2019
Typ
Bakalářská práce
Vedoucí
Ing. Petr Máj
Oponenti
RNDr. Jiřina Scholtzová, Ph.D.
Anotace
l-kalkul je stěžejní koncept počítačových věd. Jako takový je učen na většině univerzit vyučujících informatiku a počítačové vědy včetně FIT ČVUT. Pro mnoho studentů může být studium l-kalkulu a pochopení jeho významu a dopadu na současné programovací jazyky obtížnou úlohou. Tato práce vytváří evaluátor l-kalkulu a jeho front-end navržený tak, aby prezentoval l-kalkul jako programovací jazyk a umožnil snadnou integraci do výukových materiálů.

Debugger SECD virtuálního stroje

Autor
Vojtěch Rozhoň
Rok
2022
Typ
Bakalářská práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Tomáš Pecka
Anotace
Práce popisuje implementaci debuggeru SECD stroje, sestávajícího se z SECD virtualního stroje a frontendové části. Programovací jazyk tiny-lisp je navržen jako jazyk, jehož programy budou interpretovány SECD virtuálním strojem, Práce diskutuje jak přeložit výrazy z jazyka tiny-lisp, včetně maker, do SECD bajtkódu. Implementace debuggeru se zaměřuje na pomoc studentům s pochopením klíčových konceptů SECD stroje zdůrazněním souvislostí mezi zdrojovým kódem a SECD bajtkódem. Práce zahrnuje návrh a implementaci jednotlivým částí virtálního stroje a frontendového modulu.

TinyGo Jazyk

Autor
Maksim Gusev
Rok
2024
Typ
Bakalářská práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Tomáš Pecka
Anotace
Tato práce představuje jazyk TinyGo a jeho překladač. TinyGo je zjednodušená verze skutečného programovacího jazyka GoLang. Byl vytvořen pro vzdělávací účely studia konstrukce kompilátoru a zachování nejdůležitějších principů designu Go. Kompilátor pracuje pro jazyk TinyGo a generuje cílový kód pro malý x86 VM z kurzu \acrshort{nie-gen}. Kompilátor je oddělený pro snazší pochopení jeho částí a otevřený pro jakékoli rozšíření a upgrade.

Diplomové práce

Podpora bytecode v debuggeru pro GNU-R

Autor
Aleš Saska
Rok
2019
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj
Oponenti
Ing. Konrad Siek, Ph.D.
Anotace
Úvodní část této práce se zabývá analýzou a implementací disassembleru pro jazyk GNU-R. Druhá část práce se zabývá vylepšení debuggování bytecode subsystému GNU-R jazyka během níž byl implementován nativní bytecode debugger bez žádného negativního dopadu na rychlost běhu interpreteru. Byl zde také realizován nástroj pro výpis obsahu bytecode stacku. V poslední části byla implementovaná podpora pro simulování podmínečného breakpointu.

Zlepšení RIR Bytecode překladače a interpretu

Autor
Jan Ječmen
Rok
2017
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj
Oponenti
Ing. Filip Křikava, Ph.D.
Anotace
R je dynamicý programovací jazyk, navzdory svému stáří dnes stále oblíbený. RIR je alternativní implementace kompilátoru a interpretu R bajtkódu, která umožňuje snadno provádět statickou analýzu a přidávat optimalizace. RIR je ve vývoji a zatím nedosahuje výkonu standardního R. Tato diplomová práce se pokouší přiblížit výkon RIR k výkonu standardního R. V jejím rámci byly přidány nové instrukce do RIR bajtkódu a nová funkcionalita do jeho kompilátoru a došlo k přepracování jeho interpretu. Průměrné zpomalení na sadě benchmarků Shootout proti standardnímu R bylo sníženo o polovinu.

Record a Replay debugování v R

Autor
Kryštof Slavík
Rok
2018
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj
Oponenti
Ing. Filip Křikava, Ph.D.
Anotace
Nedeterminismus v programech často způsobuje, že se v nich nežádoucí chování vyskytuje zdánlivě náhodně. Record and Replay debugger je nástroj, který umožňuje programátorům izolovat takové chování tím, že se běh programu nahraje jednou ve chvíli, kdy k výskytu bugu dojde, a následně se vícekrát naprosto stejným způsobem přehraje za neustálé přítomnosti tohoto bugu včetně možnosti použití klasických debuggovacích nástrojů. Tato práce se zaměřuje na implementaci a integraci takového nástoje do programovacího jazyka R, který se běžně používá v matematice, zejména ve statistice.

Swift pro Embedded Systémy

Autor
Alan Dragomirecký
Rok
2019
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj
Oponenti
Ing. Tomáš Zahradnický, Ph.D.
Anotace
Po svém zveřejnění v roce 2014 se Swift stal okamžitě jedním z jazyků s nejrychleji rostoucí popularitou. Jeho hlavním zaměřením je vývoj uživatelských aplikací, brzy si ale našel své místo i v serverových aplikacích a nově i v datových vědách. Do této chvíle nebyla nicméně zveřejněná žádná práce zabývající se použitím Swiftu v těch nejmenších počítačích se značně omezenými výpočetními prostředky - ve vestavěných systémech. Tato práce si klade za cíl situaci změnit a být prvním krokem na cestě Swiftu k těmto zařízením. V práci je popsán proces přidání nové bare-metal platformy do kompilátoru Swiftu a nástrojů s ním spojených. V závěru je představen Swift jako možná alternativa k již existujícím řešením na poli vývoje pro vestavěné systémy.

Modulární a rozšiřitelný nástroj pro lokalizaci softwarových chyb

Autor
Petr Nevyhoštěný
Rok
2020
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj
Oponenti
doc. Ing. Ivan Šimeček, Ph.D.
Anotace
Lokalizace chyb je považována za jeden z nejvíce únavných a časově náročných úkolů při vývoji software. Přesto je stále často prováděna manuálně. Lokalizace softwarových chyb (anglická zkratka SFL) je oblast výzkumu zabývající se vývojem automatizovaných technik pro usnadnění této aktivity. Navzdory množství práce, která byla tomuto výzkumu věnována, nesplňují aplikace navržených metod kompletně potřeby praxe. Tato magisterská práce proto popisuje nový nástroj a framework pro lokalizaci softwarových chyb s názvem \emph{Aardwolf}, jehož hlavním cílem je usnadnit použití SFL technik v praxi. Toho je dosaženo velmi modulárním designem, umožňujícím snadnou rozšiřitelnost, a aplikováním doporučení, která lze naleznout v publikovaných uživatelských studiích. Pro demonstraci možností nástroje Aardwolf byla implementována trojice různých SFL technik a frontendy pro programovací jazyky C a Python. Integrace do dvou větších softwarových projektů byla popsána jako ukázka aplikovatelnosti. Předběžné výsledky ukazují, že je efektivita nástroje srovnatelná s literaturou. Zaměření na uživatelskou přívětivost a rozšiřitelnost řešení je ovšem významné zlepšení oproti současnému stavu v tomto odvětví.

Implementace Virtualniho Stroje SOM

Autor
Rudolf Rovňák
Rok
2021
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Konrad Siek, Ph.D.
Anotace
Táto práca popisuje implementáciu virtuálneho stroja pre programovací jazyk Simple Object Machine, založenom na Smalltalku. Takisto obsahuje analýzu existujúcich riešení a analýzu vlastného riešenia. Práca prezentuje syntaktickú analýzu, bajtkód s procesom kompilácie doň a prostredie pre spustenie programov napísaných v programovacom jazyku SOM.

Tiny x86 - Simulator procesorove architektury pro vyukove ucely

Autor
Ivo Strejc
Rok
2021
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Tomáš Pecka
Anotace
Tato práce prezentuje tiny x86 architekturu a virtuální stroj, určené jako pomocný nástroj studentům k porozumění technikám kompilování a jejich dopad na výkon programu. V porovnání s již existujícími instrukčními sadami je tiny x86 jednodušší na použití, protože oproti binárnímu kódování nabízí aplikační rozhraní v jazyce C++ a nelimituje se na jeden návrh (jsou podporovány prvky CISC i RISC architektury). Prezentovaný virtuální stroj nabízí rozsáhle možnosti konfigurace, dovolující z(ne)výraznit různé návrhové prvky (počet registrů, odezvu paměti, trvání instrukcí atd.). Virtuální stroj je již nasazen v předmětu NI-GEN (generování kódu) na FIT ČVUT, kde jeho jednoduchost dovoluje studentům během semestru psát kompletní kompilátor.

Implementace Objektově Orientovaných jazyků

Autor
Rasul Seidagul
Rok
2022
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Konrad Siek, Ph.D.
Anotace
Tato práce představuje tinyC+, rozšíření pro C-style programovací jazyk, který podporuje Objektově Orientované Programování. TinyC+ byl vytvořen jako učební pomůcka pro předmet Generování Kódu, který je vyučován na FIT CVUT, kde je tinyC+ použit jako demonstrátor předkladu high-level OOP konstrukcí. Proto hlavním cílem této práce bylo navrhnout minimální použitelný objektově orientovaný jazyk aby jeho přidání do vyučovaného předmětu nebylo časově náročné. TinyC+ je implementován pomocí transpileru do tinyC, jazyka podobného C, který je již v přredmětu používán. Z těchto důvodů tato práce přináší rozbor objektově orientovaných vlastností populárních programovacích jazyků, definuje a obhajuje jejich minimální výběr a popisuje implementaci tinyC+ transpileru.

Optimalizujici prekladac pro tinyC

Autor
Martin Slávik
Rok
2023
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
doc. Ing. Ivan Šimeček, Ph.D.
Anotace
Práce pojednává o tvorbě kompilátoru, a jeho vnitřních částí pro výukové účely. Práce má za úkol vytvořit kompilátor, který přeloží programy zapsané v jazyce TinyC do instrukční sady definované virtuální architekturou tiny86. TinyC je podobný jazyku C s menší sadou typů a redukovanou funkcionalitou. Tiny86 virtuální stroj je inspirovaný x86 architekturou s jednodušší instrukční sadou, za účelem lepší srozumitelnosti. Instrukční sada tiny86 zachovává zajímavé a důležité vlastnosti, které architektura x86 nabízí. Během překladu kompilátor využívá optimalizační techniky pro dosažení lepšího výkonu kompilovaného kódu. Práce porovnává výsledky naivní kompilace a kompilace se zapnutými optimalizacemi.

Modulární překladač pro TinyC

Autor
Martin Prokopič
Rok
2023
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Tomáš Pecka
Anotace
Tato práce popisuje překladač jazyka tinyC do assemberu virtuálního stroje tiny86 (oboje používané v předmětu NIE-GEN). Překladač je implementován v jazyce Scala, je napojen na existující nástroje používané v předmětu, podporuje všechny konstrukty jazyka tinyC a pro generování kódu používá pokročilé algoritmy. Hlavní části překladače (frontend, middleend, backend) jsou jasně odděleny a lze je využívat buď ze Scaly nebo externě pomocí vlastního textového mezikódu ve stylu LLVM. Díky své jednoduchosti a modularitě je překladač vhodný pro výukové účely.

x86-64 nativní backend pro TinyC

Autor
Michal Vlasák
Rok
2023
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Konrad Siek, Ph.D.
Anotace
Tato práce popisuje backend překladače, který kompiluje TinyC mezireprezentaci do nativních x86-64 instrukcí. Cílem bylo vytvořit překladač, který by ukázal složitosti spojené s architekturou x86-64, zvláště pak ve srovnání s architekturou Tiny86, kterou používají studenti předmětu NI-GEN. V teoretické části je dán zvláštní zřetel na historii architektury x86-64 a pravou podstatu jejích omezení. Je vyhodnocen dosavadní výzkum v oblasti backendů překladačů a to s přihlédnutím k možnostem architektury x86-64. Práce prezentuje návrh x86-64 TinyC backendu. Ten je založen na výběru instrukcí extenzivní peephole optimalizací a na alokaci registrů barvením grafů. Implementace samotná je důkladně rozebrána a mnoho praktických detailů je zváženo a vysvětleno. Přeložené programy mohou buď využít systémový runtime jazyka C, nebo na Linuxu mohou být rozšířeny o vlastní minimalistický runtime dovolující programům běžet bez externích závislostí. Text této práce a implementace jsou volně dostupné a mohou být použity nejen studenty předmětu NI-GEN.

Debugger pro Tiny86

Autor
Filip Gregor
Rok
2023
Typ
Diplomová práce
Vedoucí
Ing. Petr Máj, Ph.D.
Oponenti
Ing. Tomáš Pecka
Anotace
Programátoři často potřebují kontrolovat stav svých programů za běhu. Právě pro tento účel byl vytvořen speciální nástroj zvaný debugger. Přestože je tento nástroj velmi rozšířen, málokdo ví, jak přesně funguje. Částečně je to proto, že musí být podporován na více úrovních, jako je procesor, operační systém a překladač. Většina kurzů, které o nich vyučují, se debugováním nezabývá. Tato práce zkoumá, jakou podporu musí poskytovat procesor a operační systém, aby bylo možné provádět debugování na nativní úrovni. Implementace malého debuggeru je demonstrována na architektuře x86-64 a operačním systému Linux. Pozornost je poté přesunuta na podporu překladače pro debugování na úrovni zdrojového kódu. Na základě těchto poznatků je v práci představen debugger pro architekturu T86 a jazyk TinyC, které jsou využívány v kurzu překladačů NI-GEN na FIT ČVUT. Tento debugger je plně funkční a usnadňuje studentům práci s architekturou T86. Kromě toho práce představuje návrh a implementaci nového formátu debugovacích informací, který zachovává zajímavé koncepty z reálných debuggerů a zároveň je jeho použití extrémně jednoduché na strojové i lidské úrovni, což je ideální pro jeho zamýšlené použití ve výuce.