Eine Programmiersprachen-Interpreter erstellen
(craftinginterpreters.com)- 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
Hacker-News-Kommentare
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
2020 erreichte es 777 Punkte, 2024 607 Punkte.
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ß.
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“.
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.
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.
So gut ist es.
Außerdem ist es wirklich großzügig, dass die Webversion kostenlos ist.
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.
Dann braucht man auch das vom Autor gebaute provisorische Code-Generierungswerkzeug nicht mehr.
typedefparst.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.
Dabei wird der Parser so gebaut, dass er Status an den Lexer weitergibt, damit der Lexer die Menge der Typnamen kennen kann.
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.Zum Glück vermeiden Rust und Go solche Probleme, und mit sorgfältigem Design lassen sie sich durchaus verhindern.
Das shi-Projekt und, falls man sich für C interessiert, hacktical-c sind einen Blick wert.