- Write Your Own Retro Compiler behandelt auf 339 Seiten einen selbsthostenden Compiler, der auf Z80-basiertem CP/M läuft und Code für dieselbe Umgebung erzeugt, einschließlich des vollständigen Quelltexts
- T3X/0, die Zielsprache der Implementierung, ist eine einfache Sprache mit Wurzeln in Pascal und BCPL; im Buch ist ein vollständiges 20-seitiges Handbuch enthalten
- Kenntnisse in prozeduralen Sprachen wie C oder Pascal sowie in Assemblersprache sind erforderlich; mit Grundwissen zu Z80-Assembler und CP/M lässt sich das Buch leichter nachvollziehen
- Lexikalische Analyse, Parsing, Codegenerierung, einfache Optimierung, die BDOS-Schnittstelle und die Laufzeitbibliothek werden mit Diagrammen, Tabellen und Beispielen erklärt
- Der gesamte Code wird als Public Domain bereitgestellt; außerdem werden Links zum Kauf des gedruckten Buchs und der PDF-Ausgabe, zum Inhaltsverzeichnis, zu Beispielseiten und zum Quellcode-Download veröffentlicht
Umfang und Zielgruppe des Buchs
- Write Your Own Retro Compiler ist ein 2023 bei Lulu Press erschienenes Buch mit 339 Seiten, 91 Abbildungen und dem Format 6" x 9"
- Das zentrale Thema ist ein selbsthostender Compiler, der unter CP/M auf dem Z80-Prozessor läuft und Code für dieselbe Umgebung erzeugt
- Es ist so aufgebaut, dass man ihm auch ohne Erfahrung im Compilerbau folgen kann
- Die Implementierungssprache T3X/0 ist eine einfache Sprache mit Wurzeln in Pascal und BCPL
- Das Buch enthält ein vollständiges 20-seitiges Handbuch zu T3X/0
Erforderliche Kenntnisse
- Mindestens eine prozedurale Programmiersprache sollte beherrscht werden
- Als Beispiele werden C und Pascal genannt
- Außerdem sollte mindestens eine Assemblersprache bekannt sein, idealerweise Assembler für die Z80-CPU
- Grundkenntnisse des Betriebssystems CP/M werden ebenfalls vorausgesetzt
- Für Leserinnen und Leser im Selbststudium ist eine kurze Einführung in die Z80-Assemblersprache enthalten
Komponenten des Compilers
- Viele Diagramme, Tabellen und Beispiele erklären die interne Funktionsweise des Compilers
- Behandelt werden folgende Themen
- Lexikalische Analyse
- Parsing
- Codegenerierung
- Einfache Optimierung
-
BDOS-Schnittstelle
- Laufzeitbibliothek
Verfügbare Links und Code
- Der gesamte Code des Buchs ist Public Domain
- Gedrucktes Buch bestellen
- PDF-Ausgabe bestellen
- Inhaltsverzeichnis als PDF
- Beispielseiten als PDF
- Quellcode herunterladen
- Code-Seite
1 Kommentare
Meinungen auf Hacker News
Habe ein neues Compiler-Buch veröffentlicht. Es ist eher eine erweiterte Ausgabe von „Write Your Own Compiler“, und diesmal geht es statt um ELF für moderne Systeme um Codegenerierung für CP/M auf dem Z80, wodurch vieles deutlich einfacher wird.
Man kann sehen, wie viel Komplexität nötig ist, um einen Compiler zu bauen, der sich auf einem 4-MHz-Z80-System in unter 10 Minuten selbst kompiliert. Der Code ist kostenlos, das Buch ist kostenpflichtig.
Außerdem würde ich gern ein schnörkelloses Buch über Forth und Nils’ Interpretation dazu sehen.
Ich habe kürzlich einen C-Multipass-Compiler und Assembler für solche alten x86-CPUs in TypeScript gebaut.
https://github.com/Mati365/ts-c-compiler
Ich habe das gedruckte Buch der 2. Auflage von Practical Compiler Construction und mag es ziemlich. Wer sich dafür interessiert, dem empfehle ich Nils’ Bücher.
Dieses Buch sieht interessant aus. Ich warte allerdings immer noch auf einen echten Nachfolger von The Dragon Book.
Schön wäre ein Buch, das moderne CPUs und möglichst auch GPU-Optimierung behandelt und außerdem zeigt, wie man eine moderne virtuelle Maschine mit schnellem, nebenläufigem Garbage Collector entwirft und schreibt. In mancher Hinsicht könnte das sogar schwieriger sein als das Schreiben eines Compilers.
Es behandelt den Aufbau von Kontrollflussgraphen, verschiedene darauf mögliche Optimierungen, Alias-Analyse, Static Single Assignment Form, CFG-Dominator-basierte Optimierungen, Instruction Scheduling, Register Allocation und die Erzeugung von Objektcode. Wie die meisten Compiler-Bücher behandelt es keine lexikalische Analyse, Syntaxanalyse oder NFA/DFA-Themen.
Für Leute, die einen optimierenden Compiler mit fortgeschrittenen Analysen bauen wollen, dürfte auch Static Program Analysis hilfreich sein: https://cs.au.dk/~amoeller/spa/
Für Garbage Collection gibt es das Garbage Collection Handbook: https://gchandbook.org/
Wenn man schon ein gewisses Grundwissen hat, könnte einem diese Vorlesung gefallen: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
Besonders gut fand ich die Art, wie SSA-Form eingeführt wurde.
Fortgeschrittenere Themen gibt es hier: https://www.cs.cmu.edu/~15745/handouts.html
Wenn sich etwas wie „Magie“ anfühlt, sehe ich das als Zeichen dafür, dass jemand eine Grenze, die man für gegeben hielt, geschickt umgangen hat. In letzter Zeit lese ich über Fake Bass, bei dem kleine Lautsprecher scheinbar tiefere Bässe erzeugen, als sie physisch eigentlich können; spannend ist, wie dabei Obertöne genutzt werden, um das Gehirn dazu zu bringen, einen tieferen Ton wahrzunehmen, als tatsächlich vorhanden ist.
Es sieht interessant aus, hat aber den Nachteil, dass Leser zuerst die neue Programmiersprache T3X kennen oder lernen müssen.
Ich frage mich auch, ob man auf einem Retro-CP/M-System, dessen einzige Verbindung zur Außenwelt Tastatur und Bildschirm sind, einen Compiler von Grund auf schreiben und entwickeln könnte.
SubC hat 3815 Zeilen, T3X/0 hat 2330 Zeilen.
Natürlich könnte man auch ohne externe Tools auf CP/M anfangen, aber dann müsste man den Bootstrap-Compiler in Assembler schreiben. Das ist zeitaufwendig, aber durchaus machbar. Ob das als Lesestoff interessant wäre, ist allerdings fraglich.
Dass sie keine C-artige Syntax, sondern eine ALGOL-artige Syntax verwendet, ist ein wenig überraschend, aber das könnte meine Voreingenommenheit sein. Im Kopf
DOundENDauf{und}abzubilden, ist keine große Belastung.Ein Compiler-Tutorial, das über lexikalische Analyse und Syntaxanalyse hinausgeht — das ist ja fast das erste seiner Art, oder?
Ein Scherz, aber tatsächlich hören viele Materialien genau dort auf. Das werde ich mir kaufen.
Ein Buch darüber, wie man sein eigenes CP/M-ähnliches Betriebssystem schreibt, wäre auch spannend.
Es zeigt zwar, wie man ein Unix-artiges Mikrokernel-Betriebssystem baut, aber man muss einfach alles außer dem Kapitel zum Dateisystem überspringen. Außerdem sollte man den Rat zu Baum-Datenstrukturen ignorieren, nur flache Tabellen verwenden und sich nicht um eine exakte Implementierung der Dateigröße kümmern. Dann hat man CP/M.
Persönlich bevorzuge ich die 2. Auflage. Die 3. Auflage wurde meiner Meinung nach unnötig komplex, weil der Demo-Code von Minix nicht mehr auf einem PC der 1980er, sondern auf einem PC der späten 1990er laufen sollte.
Das ist nicht negativ gemeint, sondern eine Beobachtung, die hilfreich sein könnte.
Ich habe die kostenlosen Kapitel gelesen, und manches könnte für Leute ohne viel Vorwissen zum Thema schwierig sein. Unter den jeweiligen Überschriften werden Konzepte zunächst von Grund auf erklärt, etwa „Die Grammatik einer Sprache ist ...“, aber schon wenige Sätze später tauchen ohne Erklärung fortgeschrittenere Themen wie Assemblerbefehle auf.
Wenn Leser noch lernen müssen, was eine Grammatik bedeutet, könnten die direkt folgenden Sätze schwer verständlich sein. Etwas mehr Konsistenz würde das Buch daher wohl runder machen.
Deshalb hielt ich es für in Ordnung, Dinge wie Assemblerbefehle als bekannt vorauszusetzen.
Im Anhang des Buchs gibt es auch eine kurze Einführung in Z80-Assembler, aber auch sie setzt Grundlagen von Assemblersprachen voraus.
Jedes Buch muss irgendwo anfangen. Es ist schwer, ein Buch über Compilerbau zu schreiben, wenn man keinerlei Programmierkenntnisse voraussetzt. Das heißt aber nicht, dass es keinen Fluch des Wissens gibt; diesen Punkt werde ich auf jeden Fall im Blick behalten.
Unabhängig vom eigentlichen Inhalt des Buchs gefällt mir auch das genau passende retrohafte und minimalistische Webdesign.
Es löst starke Nostalgie aus. Es erinnert mich an gute Zeiten, als ich ein 6 Zoll dickes Buch mit einem Titel wie „HTML 3.2 UNLEASHED!!!!“ auf dem Schreibtisch liegen hatte und meine Websites von Hand baute.
Allerdings endet der Spaß, wenn man auf etwa 1500 statischen Seiten eine globale Änderung anwenden will. Der Schmerz ist noch nicht groß genug, dass ich dafür ein eigenes CMS bauen würde, aber selbst wenn, würde ich das Design so lassen.
https://web.archive.org/web/20231210141834/http://t3x.org/t3...