2 Punkte von GN⁺ 2026-01-17 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Buch, das den Prozess behandelt, beim Entwurf und der Implementierung von Programmiersprachen direkt zu lernen und eine vollständige Skriptsprache zu bauen
  • Erklärt Schritt für Schritt alles von Parsing, Semantik, Bytecode und Garbage Collection bis hin zur Low-Level-Implementierung
  • Beginnend bei der main()-Funktion schreibt man selbst eine Sprache mit dynamischer Typisierung, lexikalischem Scope, First-Class Functions, Klassen und Vererbung
  • Verfügbar in vier Formaten: Print, eBook, PDF und Web; im Web ist der gesamte Inhalt kostenlos lesbar
  • Geschrieben von Robert Nystrom, Entwickler der Google-Sprache Dart; eine wichtige praktische Lernressource für Entwickler mit Interesse am Sprachbau

Buchüberblick

  • Crafting Interpreters ist ein Buch darüber, wie man selbst eine voll funktionsfähige und effiziente Skriptsprache implementiert
    • Es umfasst sowohl High-Level-Konzepte wie Parsing und Semantik als auch Low-Level-Implementierungsdetails wie Bytecode-Darstellung und Garbage Collection
    • Es ist so aufgebaut, dass Leser den Code selbst schreiben und dadurch die Struktur der Sprache vollständig verstehen
  • Die fertige Sprache unterstützt umfangreiche Syntax, dynamische Typisierung, Garbage Collection, lexikalischen Scope, First-Class Functions, Closures, Klassen und Vererbung
    • Sie besteht aus einigen tausend Zeilen kompakten und schnellen Codes, den die Leser vollständig selbst schreiben

Verfügbare Formate

  • Das Buch ist in vier Formaten verfügbar: Print, eBook, PDF und Web
    • Print: 640 Seiten mit hochauflösenden handgezeichneten Illustrationen und sorgfältiger Typografie
    • eBook: CSS passt sich an die Bildschirmgröße des Geräts an und unterstützt farbiges Syntax-Highlighting und Hyperlinks
    • PDF: Reproduziert Satz und Illustrationen der Druckausgabe originalgetreu und bietet zugleich bessere Portabilität
    • Web: Responsives Design mit allen Kapiteln und Illustrationen, vollständig kostenlos online lesbar

Über den Autor

  • Der Autor Robert Nystrom arbeitet bei Google an der Entwicklung der Sprache Dart
    • Zuvor war er bei Electronic Arts acht Jahre lang in der Spieleentwicklung tätig
    • Er ist auch Autor des Bestsellers Game Programming Patterns, der ebenfalls kostenlos verfügbar ist
  • Fasziniert vom Sprachbau entwickelte er mehrere Hobby-Sprachprojekte (Wren, Magpie, Finch, Vigil)
  • Er ist über seinen persönlichen Blog und auf Twitter (@munificentbob) aktiv und betreibt eine Mailingliste zum Buch

Zugriff und Kaufmöglichkeiten

  • Die Druckausgabe ist bei großen Buchhändlern wie Amazon, Barnes & Noble und Book Depository erhältlich
  • Das eBook ist bei Kindle, Apple Books, Google Play Books und Smashwords verfügbar
  • Die PDF-Version kann über Payhip gekauft werden; außerdem gibt es einen kostenlosen Beispiel-PDF-Download
  • Die Web-Version kann auf der offiziellen Website vollständig kostenlos gelesen werden

1 Kommentare

 
GN⁺ 2026-01-17
Hacker-News-Kommentare
  • Beim Lesen dieses Buches habe ich das Expression Problem und den Visitor Pattern als dessen Lösung viel besser verstanden.
    Dadurch habe ich auch das Konzept der Klassenhierarchie-Vererbung (Class Hierarchy Inheritance), bei dem kein Visitor nötig ist, vollständig begriffen.
    In der Sprache Newspeak kann man verschachtelte Klassen innerhalb von Klassen haben, und bei der Vererbung werden diese verschachtelten Klassen ebenfalls mitvererbt.
    Dieser Blogbeitrag behandelt, dass diese Funktion Free Object Algebras ermöglicht: dieser Blogbeitrag
    Siehe auch: Artikel zum Expression Problem, offizielle Newspeak-Website
  • Zu diesem großartigen Buch gab es zwei populäre Diskussionen.
    2020 erreichte es 777 Punkte, 2024 607 Punkte.
  • Dieses Buch war ein wirklich gutes Material, wenn man eine neue Sprache lernt.
    Denn man lernt, indem man verschiedene Sprachfeatures und Muster selbst implementiert.
    In Sprachen mit Features, die es in Java nicht gibt, ist es schwer, ähnliche Muster anzuwenden, aber diese Herausforderung selbst machte Spaß.
  • Ich habe dieses Buch in den Winterferien komplett durchgelesen.
    Der lockere Schreibstil des Autors und der Humor an vielen Stellen haben mir sehr gefallen.
    Ich hoffe auf eine Fortsetzung wie „Einen Type Checker zu Lox hinzufügen“.
  • Ein wirklich großartiges Buch.
    Anfangs habe ich die Printausgabe gekauft, aber sie war so groß und schwer, dass ich sie schließlich noch einmal als E-Book gekauft habe.
    Notizen und Suche sind viel bequemer.
    Trotzdem fühlt es sich beim Lesen manchmal an, als hätte man sich in den Bergen verlaufen :)
    Auch das andere Buch des Autors, Game Programming Patterns, ist empfehlenswert.
    • Ich habe die Bindung meines Exemplars auf Spiralbindung umstellen lassen.
      Das kann eine Druckerei leicht machen, und auf dem Schreibtisch ist es viel angenehmer zu benutzen.
      Crafting Interpreters würde ich allerdings niemals wegwerfen, also habe ich es so gelassen.
  • Ich habe die Printausgabe dieses Buches gleich dreimal als Geschenk gekauft.
    So gut ist es.
    • Danke dafür, dass du ein Exemplar gekauft hast :)
  • Es ist eines der besten Materialien, um Compiler-Design zu lernen.
    Außerdem ist es wirklich großzügig, dass die Webversion kostenlos ist.
    • Allerdings steht das Wort „compiler“ nicht direkt im Titel des Buches.
  • Ich mag dieses Buch wirklich sehr.
    Schade ist nur, dass die Java-Version veraltet ist.
    Ich hätte gern eine überarbeitete Ausgabe, die neuere Features wie sealed classes oder exhaustive switch berücksichtigt.
    • Es ist auch eine gute Übungsaufgabe, es selbst auf aktuelles Java zu aktualisieren.
      Dann braucht man auch das vom Autor gebaute provisorische Code-Generierungswerkzeug nicht mehr.
  • Ich habe mich gefragt, wie man kontextabhängige Syntax wie die von C++-typedef parst.
    Es gibt zwar einen eher hackigen Ansatz, bei PEG-basierten Parsern einen Context Stack hinzuzufügen, aber das Problem des Syntaxwechsels bleibt schwierig.
    Persistent Data Structures oder transactional data structures könnten helfen, aber ich habe noch keine klare Formalisierung gefunden.
    • Siehe Lexer hack.
      Dabei wird der Parser so gebaut, dass er Status an den Lexer weitergibt, damit der Lexer die Menge der Typnamen kennen kann.
    • Eine andere Methode ist die Verwendung eines funktionalen Parsers.
      In Bibliotheken wie Parsec kann man zum Beispiel die do-Notation nutzen, sodass die Ergebnisse jedes Schritts mit den folgenden Parsern geteilt werden können.
    • Das Grammatikdesign von C/C++ ist auf einem katastrophalen Niveau, daher entstehen solche Probleme.
      Zum Glück vermeiden Rust und Go solche Probleme, und mit sorgfältigem Design lassen sie sich durchaus verhindern.
  • Für Leute, die mit Interpretern anfangen wollen, hier ein paar Ressourcen.
    Das shi-Projekt und, falls man sich für C interessiert, hacktical-c sind einen Blick wert.