Mathematik  |  Informatik

 

Dario Llarden, 2003 | Riehen, BS

 

Diese Arbeit zielt darauf ab, Studierenden (und anderen Interessierten) eine Möglichkeit zu bieten, auf eine lustige und unterhaltsame Art und Weise Compilerbau zu erlernen. Dazu wurde die Programmiersprache INSULT und ihr Compiler entwickelt. Bei INSULT muss der Programmierer mit «please» bitte sagen, sodass ein Befehl ausgeführt wird. Alternativ kann «thanks» verwendet werden, um sich im Voraus für die kommenden Befehle zu bedanken. Der INSULT-Compiler kompiliert INSULT zuerst nach C++ und ruft dann einen C++ Compiler auf. Der Compiler selbst gibt, wenn er einen Fehler im Inputprogramm erkennt, ein zufälliges anderes Programm zurück. Das kompilierte Programm gibt im Falle eines Laufzeitfehlers eine zufällige, lustig gestaltete, jedoch wenig hilfreiche Fehlermeldung zurück. Die Eigenschaften der Sprache zusammen mit dem speziellen Verhalten des Compilers eignen sich so gut, Compilerbau unterhaltsam zu erlernen. Weiter ist der Compiler von Grund auf neu programmiert und dementsprechend simpel genug, um als Lernwerkzeug zu dienen. In drei verschiedene Schwierigkeiten eingeteilte Übungen geben den Lernenden einen roten Faden. Die Übungen sind auf GitHub (https://inslt.dev/source) zusammen mit dem gesamten Code auffindbar. Zu sämtlichen Übungen sind auf GitHub auch Lösungen sowie Tests vorhanden.

Fragestellung

Die Literatur zu Compilern ist oft sehr komplex und abstrakt. Ausserdem ist die Theorie oft sehr trocken. (I) Gibt es andere Methoden, um Leuten eine angenehme Einführung in die Welt von Compilern zu bieten? (II) Wie kann das Gefühl nach «Lust auf mehr» hervorgebracht werden?

Methodik

INSULT kennt einfache Bausteine wie if-statements oder Funktionen. Was INSULT speziell macht, sind «please» und «thanks». «please» muss am Ende von Anweisungen geschrieben werden, sonst werden sie nicht ausgeführt (man bittet den Compiler, die Anweisung nicht zu ignorieren). «thanks» kann benutzt werden, um sich im Voraus für mehrere Anweisungen zu bedanken, diese brauchen dann kein «please» mehr (wenn es trotzdem steht, wird die Anweisung zweimal ausgeführt). Der Compiler von INSULT ist so programmiert, dass lustige, aber nutzlose Fehlermeldungen erscheinen, wenn beim kompilierten Programm ein Laufzeitfehler auftritt. Dazu kommt, dass der Compiler ein zufälliges Programm, welches ebenfalls unterhaltsam entworfen ist, zurückgibt, falls der INSULT-Code Fehler enthält. Diese Funktionalität soll das Experimentieren mit INSULT abwechslungsreich machen. Die in verschiedene Schwierigkeitsgrade eingeteilten Übungen sind gezielt auf bestimmte Bereiche des Compilers ausgerichtet.

Ergebnisse

Da der Compiler von Grund auf neu geschrieben ist, ist der Code an sich gut verständlich und benötigt kein Vorwissen anderer Tools. Der Code ist mit Kommentaren gut dokumentiert und erleichtert so weiter das Verständnis für Interessierte. Dies ist zentral, sodass sich Leute schnell in den Code einfinden und von diesem Tool profitieren können. Die Einteilung der Übungen in verschiedene Schwierigkeitsstufen erleichtert den Einstieg und bietet einen roten Faden, an welchem sich die Leute orientieren können. Zusammen mit der schriftlichen Arbeit ist somit eine klare Struktur gegeben, auf welche sich Interessierte stützen können. Weiterhin kann die schriftliche Arbeit auch als Leitfaden dienen, um selbst eine simple Programmiersprache zu implementieren.

Diskussion

Die klassische Art über Compiler etwas zu lernen ist, in Vorlesungen zu sitzen oder Bücher zu lesen. Diese Arbeit bietet den Leuten eine alternative Möglichkeit, effizient und spielerisch sich das nötige Wissen selbst beizubringen. Was die Arbeit jedoch nur sehr begrenzt behandelt ist die Optimierung des Codes. Dies ist ein wichtiger Aspekt in vielen Compilern, weswegen man sich dazu noch separat informieren sollte. Ebenfalls wird die Generierung von Maschinencode nicht erwähnt.

Schlussfolgerungen

Die schriftliche Arbeit zusammen mit dem Compiler und den Übungen bietet ein gutes Werkzeug, um Leuten einen strukturierten Einstieg in die Welt der Compiler zu geben. Vor allem bietet sie eine Alternative zu traditionelleren Arten, Compilertheorie zu erlernen. Das selbständige Lösen von Aufgaben und Verstehen von Code ist weniger trocken als ein Buch und fördert deswegen die Motivation. Was noch zu tun wäre, ist eine genaue Dokumentation von INSULT selbst, also ihrer Syntax und auch der Semantik. Der INSULT-Compiler könnte mit mehr Optimierungen versehen werden, um dann ebenfalls Übungen zu Optimierung anbieten und so diesen wichtigen Aspekt ins Lernprogramm aufzunehmen.

 

 

Würdigung durch den Experten

Michal Terepeta

The focus of the project is INSULT, an unusual programming language developed by Dario Llarden for the purpose of teaching the basics of compiler construction. The language has a number of quirks and unusual features designed to make the process of learning more entertaining and engaging. The paper describes the design of the language as well as its implementation in C++. The compiler is open-source, available on GitHub, and includes a number of exercises along with tests and solutions designed to help with the learning process.

Prädikat:

gut

 

 

 

Gymnasium Leonhard, Basel
Lehrer: Matthias Amberg