Skip to content

Commit ff109cb

Browse files
committed
project: add bootstrapping and self-hosting
1 parent fc6f381 commit ff109cb

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

homework/project.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,41 @@ Potentiell interessante Literatur im Bereich DSL:
147147
realisiert den Interpreter für MiniJava im Dungeon.
148148
:::
149149

150+
- Compiler Bootstrapping: Eine kleine Sprache mit OOP- und FP-Features entwerfen
151+
und zwei Compiler bauen
152+
153+
::: details
154+
Sie entwerfen eine kleine Sprache "X" mit OOP- und FP-Elementen.
155+
156+
Sie implementieren Compiler "A" in einer bestehenden Sprache Ihrer Wahl
157+
(Haskell, OCaml, Racket, Clojure, Java, zur Not auch Python oder Rust oder
158+
andere). Compiler A übersetzt nur ein Minimal-Subset von X: "X-min". A parst
159+
X-min, prüft Typen in einfacher Form und erzeugt Code in der gewählten
160+
Zielsprache ("transpiling").
161+
162+
Sie schreiben nun in X-min den Compiler "B", der den vollen Sprachumfang von X
163+
übersetzen kann. Sie zeigen Bootstrapping: B wird mit A gebaut und kompiliert
164+
anschließend in X formulierte Programme. B parst und kompiliert die
165+
Vollsprache X. B darf intern ein Desugaring auf den Kern verwenden.
166+
167+
Bootstrapping: B wird mit A auf die Zielplattform transpiliert. Sie kompilieren
168+
die *Quellen* von B mit dem Compiler A. Sie erhalten daraus den Compiler B in
169+
der Zielsprache (Sourcecode für B in der Zielsprache, z.B. Haskell, Java, ...).
170+
Sie bauen nun B mit dem passenden Systemwerkzeug (z.B. javac oder gcc).
171+
Verwenden sie den so entstehenden ausführbaren Compiler B, um Programme der
172+
Vollsprache X zu kompilieren.
173+
174+
Self-Hosting: Kann Ihr Compiler B sich selbst kompilieren, also kann B den in X
175+
geschriebenen Quellcode von B korrekt übersetzen?
176+
177+
Transpiling: Die Codegenerierung kann als Transpilation in eine bestehende
178+
Zielsprache (z.B. Java oder C) erfolgen. Sie brauchen also keine SSA-Phase und
179+
Assembler-Generierung o.ä. umsetzen. Der so generierte Code soll sich mit
180+
Standardwerkzeugen kompilieren oder ausführen lassen (z.B. javac, gcc, python,
181+
node). Sie sollten vermutlich eine kleine Laufzeitbibliothek in der Zielsprache
182+
mitliefern.
183+
:::
184+
150185
- LaTeX Equation Language: Parsen und übersetzen eines LaTeX-Teilgrammatik
151186
(Arithmetik, cases, Funktionsdefinition) in ausführbaren LLVM-IR-Code oder
152187
Java-Bytecode o.ä. Ziel: Brücke von symbolischer Notation zu maschinennahem

0 commit comments

Comments
 (0)