1 Punkte von GN⁺ 2025-12-12 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Jack Crenshaws „Let’s Build a Compiler“-Tutorial, das zwischen 1988 und 1995 veröffentlicht wurde, wurde in Python und WebAssembly nachgebaut.
  • Das Original nutzte Pascal und Motorola 68000-Assembler, doch diese Umsetzung überführt es in Code, der in einer modernen Umgebung ausführbar ist.
  • Kern des Tutorials ist es, einen rekursiven Abwärts-Parser (recursive-descent parser) selbst zu implementieren und schon in frühen Phasen echten Assembler-Code zu erzeugen.
  • Crenshaws Ansatz nutzt syntax-direktierte Übersetzung (syntax-directed translation), zeigt dabei aber Grenzen bei der Typverarbeitung.
  • Diese Neuimplementierung ist deshalb bedeutsam, weil das klassische Tutorial in einer Form neu aufgebaut wurde, in der moderne Entwickler es selbst ausführen und ausprobieren können.

Hintergrund des klassischen Tutorials

  • Jack Crenshaws „Let’s Build a Compiler“ ist ein Einsteiger-Tutorial zur Compiler-Entwicklung, das zwischen 1988 und 1995 erschien und bis heute häufig genannt wird.
    • Die Originalfassung war in Pascal verfasst und erzeugte Motorola 68000-Assemblercode.
    • Auch 2025 wird es, 35 Jahre später, weiterhin regelmäßig auf Plattformen wie Hacker News diskutiert.
  • Der Autor ist diesem Tutorial erstmals 2003 begegnet und wurde stark beeindruckt; 2025 hat er es auf Python und WebAssembly übertragen.

Neuimplementierung mit Python und WebAssembly

  • Er beschränkte sich nicht aufs Lesen, sondern implementierte den Tutorial-Compiler in Python und so, dass er WebAssembly (WASM) ausgibt.
  • Das Ergebnis ist im GitHub-Repository (eliben/letsbuildacompiler) veröffentlicht.
    • In der Datei TUTORIAL.md wird erklärt, wie jeder Teil des Originals auf Python-Code abgebildet wird.
    • Leser können den Original-Tutorialtext verfolgen und dabei direkt lauffähigen Code ausprobieren.

KISS-Sprachbeispiel und WASM-Ausgabe

  • Es werden die Ergebnisse der Kompilierung eines Beispielprogramms in der von Crenshaw entworfenen KISS-Sprache mit dem Python-Compiler gezeigt.
    • Das Beispiel enthält procedure, while-Schleifen sowie Wert- und Referenzübergabe.
  • Der ausgegebene WASM-Text enthält Logik zur Behandlung von by-reference Parameters, wobei kaum Optimierungen durchgeführt wurden.
  • Der Teil, in dem die globale Variable X implizit aus main zurückgegeben wird, dient der Testbequemlichkeit.
  • Der erzeugte WASM-Code wird für Tests eingesetzt, bei denen erwartete Ergebnisse durch tatsächliche Ausführung verifiziert werden.

Stärken des Tutorials

  • Crenshaws Tutorial baut schrittweise einen rekursiven Abwärts-Parser auf und legt den Fokus auf eine funktionierende Codeerzeugung statt auf komplexe Theorie.
    • Damals galten lex und yacc als Standard, doch die Schlichtheit und Klarheit eines selbstgeschriebenen Parsers hatten großen Einfluss.
    • In den folgenden 20 Jahren entwickelte der Autor eine Vorliebe für handgeschriebene rekursive Abwärts-Parser.
  • Während die meisten Lehrinhalte seinerzeit auf Parsing fokussiert waren, behandelt Crenshaw bereits früh die Codeerzeugung in den ersten Phasen.

Grenzen und Verbesserungspotenzial

  • Das Tutorial verwendet syntax-direktierte Übersetzung und erzeugt Code direkt während des Parsings.
    • Dieser Ansatz ist für das Lernen nützlich, hat aber die Grenze, dass Typinformationen vorher nicht bekannt sind und dadurch Optimierung schwierig wird.
  • Besonders ab dem 14. Teil mit der Einführung von Typen wird deutlich, dass ein strukturierterer Ansatz mit Zwischencode (IR) oder AST notwendig ist.
  • Warum Crenshaw das Tutorial nach Teil 14 abbrach, ist nicht dokumentiert, doch es wird die Möglichkeit erwähnt, dass dies mit dieser Grenze zusammenhängt.
  • Der Autor hält es für sinnvoller, ab diesem Wendepunkt erst einen AST zu erzeugen und danach eine Typprüfung sowie Codegenerierung vorzunehmen.

Fazit

  • Das Original-Tutorial bleibt ein exzellenter Einstieg in den Compilerbau mit ausgezeichneter Lesbarkeit und Praxisnähe.
  • Diese Python- und WASM-Version ergänzt es so, dass heutige Entwickler ohne veraltete Technik lernen können.
  • Über das GitHub-Repository ist es für alle erprobbarkeit und stellt eine moderne Neuinterpretation dar, die ein direktes Erleben der Compilerstruktur ermöglicht.

Noch keine Kommentare.

Noch keine Kommentare.