- Der Autor stellte sich der schwierigen Herausforderung, einen C-Compiler in 500 Zeilen Python-Code zu schreiben.
- Der Compiler arbeitet in einem einzigen Durchlauf und erzeugt den Code bereits beim Parsen, anders als übliche Zwei-Pass-Compiler, die zunächst einen Syntaxbaum aufbauen und ihn dann in Maschinencode umwandeln.
- Der Compiler zielt auf WebAssembly ab; diese Entscheidung entstand eher aus Neugier als aus praktischen Erwägungen. Hervorgehoben werden die besonderen Herausforderungen von WebAssembly, etwa das Fehlen von Registern und die Nutzung einer Stack-Maschine.
- Aufgrund der Beschränkung auf 500 Zeilen unterstützt der Compiler bestimmte C-Funktionen nicht, darunter Strukturen, Enumerationen, Unions, Präprozessor-Direktiven, Gleitkommazahlen und 8-Byte-Typen.
- Der Compiler besteht 34 von 220 Testfällen der c-testsuite und kann ein Programm zur Berechnung der Fibonacci-Folge erfolgreich kompilieren und ausführen.
- Der Beitrag bietet eine detaillierte Analyse des Compiler-Codes und erklärt, wie verschiedene Aspekte der C-Syntax verarbeitet werden und welche Schwierigkeiten bei der Arbeit mit WebAssembly auftreten.
- Trotz der Komplexität eines Compilers zeigt er, dass das Ergebnis überraschend kompakt sein kann, wenn man Abstriche bei der Codequalität macht und alles in einem einzigen Durchlauf erledigt.
- Es wird vorgeschlagen, dass solche Single-Pass-Compiler wegen ihrer Kompaktheit hervorragend als
stage0 für selbsthostende Sprachen geeignet sein könnten.
- Die Zeilenanzahl des Codes wurde mit dem Tool
sloccount gemessen, wobei Kommentare, Docstrings und Leerraum ausgeschlossen wurden.
1 Kommentare
Hacker-News-Kommentare