Einführungslehrbuch zu Compilern und Sprachdesign (2021)
(dthain.github.io)- Ein kostenloses Online-Lehrbuch, entwickelt für den Compiler-Kurs CSE 40243 an der University of Notre Dame; das vollständige PDF und PDFs einzelner Kapitel können direkt heruntergeladen und zum Lernen genutzt werden
- Deckt den Stoff eines Semesters ab und folgt dem Ablauf der Compiler-Entwicklung, also dem Prozess, Programme in einer Hochsprache in Programme einer niedrigeren Sprache zu übersetzen
- Lernende sollen einen einfachen Compiler implementieren, der eine C-ähnliche Sprache als Eingabe annimmt und in X86- oder ARM-Assembly übersetzt
- Am besten geeignet für Studierende auf Bachelor-Niveau mit Erfahrung in C-Programmierung sowie Kenntnissen in Datenstrukturen und Rechnerarchitektur
- Das PDF darf für private und akademische Zwecke genutzt werden, kommerzielles Drucken und Verteilen ist jedoch untersagt; aktuelle Materialien sollten auf compilerbook.org geprüft werden
Lehrbuch auf Basis des Compiler-Kurses der University of Notre Dame
- Introduction to Compilers and Language Design ist ein kostenloses Online-Lehrbuch, das Douglas Thain für den Compiler-Kurs CSE 40243 an der University of Notre Dame entwickelt hat
- Die 2. Auflage ist die Ausgabe von 2020; als Änderungsdatum ist der 15. Januar 2021 angegeben
- Leser, die ein physisches Buch möchten, können eine Hardcover- oder Paperback-Ausgabe kaufen
- Das Lehrbuch behandelt sowohl theoretische als auch praktische Aspekte der Informatik, indem es durch den Prozess führt, einen Compiler von Grund auf zu erstellen
- Das abschließende Lernziel ist die Implementierung eines einfachen Compilers, der eine C-ähnliche Sprache als Eingabe annimmt und in X86- oder ARM-Assembly übersetzt
PDFs, Beispielcode und Nutzungsbedingungen
- Das vollständige Lehrbuch-PDF sowie PDFs einzelner Kapitel werden bereitgestellt
- Die Anhänge enthalten Sample Course Project, The B-Minor Language und Coding Conventions
- Das GitHub-Repository compilerbook-examples enthält zum Buch passende Übungsmaterialien
- Verschiedene Scanner und Parser
- Grundstruktur des Startcodes für den Projekt-Compiler
- Beispiel-Testfälle für die einzelnen Stufen Scanner, Parser, Typechecker und Code Generator
- Das PDF darf für private und akademische Zwecke heruntergeladen, ausgedruckt und verwendet werden
- Kommerzielles Drucken oder Verteilen ist untersagt; statt lokale Kopien des PDFs zu verteilen, sollten Studierende auf die Seite compilerbook.org verwiesen werden
- Tippfehler oder Fehler können per E-Mail an
dthain@nd.edugemeldet werden, mit dem BetreffCompiler Book Errata
1 Kommentare
Meinungen auf Hacker News
Ich habe an der Uni Dr. Thains Compiler-Kurs besucht, und er war wirklich hervorragend.
Er war ein großartiger Dozent, und durch das Kursprojekt konnte man Schritt für Schritt selbst einen C-artigen Compiler bauen. Das Beispielprojekt hier sieht fast genauso aus wie das Projekt, das wir damals gemacht haben; ich kann nur dringend empfehlen, es bis zum Ende durchzuarbeiten.
Ich weiß noch nicht, in welcher Vorlesung das behandelt wurde, aber C4(https://news.ycombinator.com/item?id=8558822) und C4x86(https://news.ycombinator.com/item?id=8746054) wären wohl gute Themen für ein Semester.
Es handelt sich um einen sehr kleinen selbstkompilierenden Compiler für eine C-Teilmenge und dürfte sich auch gut als Grundlage für Zusatzaufgaben eignen, bei denen man die Funktionalität erweitert.
Verwandte Beiträge: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - Mai 2022, 68 Kommentare
Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - April 2019, 1 Kommentar
Es fühlt sich so an, als bewege es sich nur in einem engen Rahmen rund um C und seine eigenartigen Konventionen.
In der Buchbeschreibung heißt es ebenfalls, es sei „ein einsemestriges Einführungsbuch, das Leser in die Lage versetzen soll, einen einfachen Compiler zu bauen, der eine C-ähnliche Sprache akzeptiert“.
Laut Vorwort ist das Dragon Book also auf fortgeschrittenem Graduiertenniveau?
Es ist zwar ein Klassiker, behandelt aber nur in gewissem Maß die Grundlagen der Berechnungstheorie, und der Rest der Compiler-Themen wird eher im Schnelldurchlauf gestreift.
Moderne Compiler-Themen auf Graduiertenniveau deckt es nicht wirklich ab, und ein praxisnahes Buch ist es auch nicht. Das Tiger Book ist als Einführung mit Blick auf die Balance zwischen Praxis und Theorie deutlich besser.
Wirklich fortgeschrittene Compiler-Themen lassen sich meiner Meinung nach kaum mit einem einzigen Buch gut abdecken.
Dort heißt es: „Um das gesamte Buch oder den größten Teil davon zu behandeln, sind mindestens zwei Quartale oder zwei Semester erforderlich. Üblicherweise wird die erste Hälfte in einem Undergraduate-Kurs behandelt, während die zweite Hälfte mit Schwerpunkt auf Code-Optimierung in einem Graduierten- oder zweiten Kurs mittleren Niveaus behandelt wird.“
Wenn ich Leute sehe, die Sprachen entwerfen und Compiler bauen, finde ich das manchmal wirklich beeindruckend.
Aus Neugier wollte ich selbst einmal eine Sprache bauen, aber es war zu schwierig, also habe ich mich mit einem einfachen C-Backend begnügt. Leute, die zu LLVM beitragen, scheinen bis hin zur Assembler-Erzeugung alles zu kennen; das ist wirklich erstaunlich.
Ich war Webentwickler und bin dann in die Arbeit an einem Compiler auf LLVM-Basis gewechselt. LLVM selbst ist riesig, und es ist nicht leicht, alle Bereiche und Mechanismen zu lernen.
Aber für das Schreiben nicht allzu komplexer Passes, Bugfixes und Regression-Fixes braucht man kein außergewöhnlich spezielles Wissen.
Einen Assembler zu schreiben ist eine gute Möglichkeit, sich mit der Struktur von Compilern vertraut zu machen. Man muss sich dabei nämlich nicht um Optimierungen, Typen oder die vielen Features kümmern, die Hochsprachen kompliziert machen.
Schon wenn man nur das Frontend der selbst entworfenen Sprachsyntax und eine kleine Evaluierungsschleife implementiert, bekommt man viele Teile einer echten Sprache zu sehen. Weil man nicht von realen Problemlösungen ausgebremst wird, eignet sich das auch gut zum Lernen und Lehren.
Es gibt also absolut keinen Grund, sich dafür zu schämen, dass man sich mit einem einfachen C-Backend begnügt hat.
Schon beim Überfliegen des Inhaltsverzeichnisses sieht man kaum zentrale Themen des Sprachdesigns.
Es wirkt eher wie eine „Einführung in Compiler“ als wie der Titel suggeriert.
Das Niveau passt, um etwas wie Python oder Ruby oder einen einfacheren Pascal-Compiler zu verstehen.
Compiler und Sprachdesign sind ein Feld, das so alt ist wie diese Branche; für ein einzelnes Fach gibt es viel zu viel Wissen. Trotzdem ist dieser Kurs gut und meiner Ansicht nach besser als ähnliche Kurse auf Basis des Dragon Book.
Zwischen all den AI-Themen und dem Lärm ist es schön, so einen Compiler-Beitrag zu sehen.
Korrekte, hochwertige Nutzung von AI ist wertvoll, und Nicht-AI-Arbeit ist ebenfalls wertvoll. Statt die Arbeit anderer pauschal abzuwerten, wären sinnvolle Kriterien für AI-bezogene Ergebnisse wünschenswert.
Guter Beitrag.
Beeindruckend ist, wie er mit hervorragenden Beispielen früher gelerntes Wissen wieder klar schärft.