Ein in C geschriebener Rust-Compiler
(notgull.net)Warum einen Rust-Compiler in C schreiben?
-
Es gibt mehrere Gründe, warum die Aktivität zuletzt zurückgegangen ist
- persönliche Ereignisse wie der Tod eines Familienmitglieds
- mehr Verantwortung im Job
- nachlassende Leidenschaft für Open Source
- Konzentration auf ein neues Projekt
-
Dieses Projekt besteht darin, einen Rust-Compiler in reinem C zu schreiben
- in reinem C geschrieben, ohne C++,
flex,yaccoderMakefile - Der Projektname ist Dozer
- in reinem C geschrieben, ohne C++,
Warum so etwas tun?
- Man muss Bootstrapping und seine Bedeutung verstehen
- Um Rust-Code auszuführen, braucht man einen Compiler
- Der wichtigste Compiler für Rust ist
rustc rustcist in Rust geschrieben und wird benötigt, um Rust-Code zu kompilieren- Um
rustczu kompilieren, braucht man eine frühere Version vonrustc - Frühere Versionen von
rustcwurden in OCaml geschrieben - Der OCaml-Compiler kann mit Guile kompiliert werden, und Guile ist in C geschrieben
Das Abstiegsprinzip
-
Einführung in das Projekt Bootstrappable Builds
- Es beginnt mit einem 512-Byte-Binär-Seed
- Von einem einfachen Compiler aus werden schrittweise komplexere Compiler erzeugt
- Am Ende können TinyCC, GCC, Linux usw. kompiliert werden
-
Rust taucht in diesem Prozess sehr spät auf
- Mit mrustc wird
rustcVersion 1.56 kompiliert - Wenn man Rust vor der Einführung von C++ verwenden will, ist das unmöglich
- Mit mrustc wird
-
Dozer zielt auf einen in C bootstrappbaren Rust-Compiler ab
- Er soll mit TinyCC bootstrappbar sein
Plan
-
In den vergangenen zwei Monaten wurde an Dozer gearbeitet
- kompilierbar mit TinyCC und cproc
- verwendet QBE als Backend
- Der Lexer und Teile des Parsers sind derzeit fertig
- Makro-/Modul-Erweiterung wird vorerst aufgeschoben
- Die Typprüfung unterstützt nur
i32 - Die Codegenerierung ist noch unzureichend
-
Zukünftige Pläne
- Dozer schrittweise weiterentwickeln, sodass grundlegende
libc-Beispiele,libcoreundrustckompiliert werden können - ein
cargoähnliches Werkzeug erstellen, das Rust-Pakete kompilieren kann - automatisch erzeugten Code entfernen
- einen Prozess zum Kompilieren von
rustcundcargoerstellen
- Dozer schrittweise weiterentwickeln, sodass grundlegende
Zusammenfassung von GN⁺
- Dieser Text handelt von einem Projekt, das einen Rust-Compiler in reinem C schreibt
- Er erklärt die Bedeutung von Bootstrapping und den Prozess, damit einen Rust-Compiler zu erstellen
- Das Projekt Dozer zielt auf einen in C bootstrappbaren Rust-Compiler ab
- Das Projekt ist äußerst anspruchsvoll, und ob es erfolgreich sein wird, ist ungewiss, aber schon der Versuch ist bedeutsam
1 Kommentare
Hacker-News-Kommentare
Um Rust zu bootstrappen, wäre es gut, zunächst ein Proto-Rust in C zu schreiben und dann den vollständigen Rust-Compiler in Proto-Rust zu schreiben
Ich schreibe als Hobby einen C-Compiler in Rust und nenne ihn "Small C Compiler"
printf("Hello World!")verarbeitet werden kanntypedef-Problems frage ich mich, was die akademische Welt dafür als Lösung hatDasselbe Bootstrap-Problem gibt es auch bei Hardware
Ich musste vier Links verfolgen, um die Vorteile des Bootstrappings zu finden
Wenn C++ in die Bootstrap-Kette eingeführt wird, ist das Bootstrapping fast beendet
Um neue Binärdateien für das Zielsystem zu erzeugen, muss rustc dieses System unterstützen
Ich stelle mir vor, einen C++-Interpreter oder -Compiler in Scheme zu schreiben
Wenn man den gesamten Stack betrachtet, könnte das ein Weg sein, das Problem von "trusting trust" zu umgehen
Mir gefällt die Verwendung von QBE als Backend
Man könnte in Erwägung ziehen, FORTH im Bootstrap-Prozess als Teil der Toolchain zu verwenden