1 Punkte von GN⁺ 2024-08-26 | 1 Kommentare | Auf WhatsApp teilen

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, yacc oder Makefile
    • Der Projektname ist Dozer

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
    • rustc ist in Rust geschrieben und wird benötigt, um Rust-Code zu kompilieren
    • Um rustc zu kompilieren, braucht man eine frühere Version von rustc
    • Frühere Versionen von rustc wurden 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 rustc Version 1.56 kompiliert
    • Wenn man Rust vor der Einführung von C++ verwenden will, ist das unmöglich
  • 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, libcore und rustc kompiliert werden können
    • ein cargo ähnliches Werkzeug erstellen, das Rust-Pakete kompilieren kann
    • automatisch erzeugten Code entfernen
    • einen Prozess zum Kompilieren von rustc und cargo erstellen

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

 
GN⁺ 2024-08-26
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

    • Proto-Rust hätte keinen Borrow Checker oder Makro-Unterstützung, würde keinen Speicher freigeben und müsste keinen guten Code erzeugen
    • Proto-Rust wäre C mit Rust-Syntax
    • Ich frage mich, warum dieser Weg nicht gewählt wurde
  • Ich schreibe als Hobby einen C-Compiler in Rust und nenne ihn "Small C Compiler"

    • Er verwendet Cranelift als Backend, und die Compiler-Architektur ist pluginfähig und gut hackbar
    • Es ist nicht geplant, ihn als Open Source zu veröffentlichen, bevor printf("Hello World!") verarbeitet werden kann
    • Ich versuche, Präprozessor und Parser zu implementieren, und beteilige mich an rust-peg und HimeCC
    • Wegen des typedef-Problems frage ich mich, was die akademische Welt dafür als Lösung hat
  • Dasselbe Bootstrap-Problem gibt es auch bei Hardware

    • Computer werden mit bereits zuvor gebauten Computern und Software hergestellt
    • Das ist ein interessantes Thema zum Nachdenken
  • Ich musste vier Links verfolgen, um die Vorteile des Bootstrappings zu finden

    • Ich hatte erwartet, dass das "Warum" im Titel den Grund erklärt
  • Wenn C++ in die Bootstrap-Kette eingeführt wird, ist das Bootstrapping fast beendet

    • Wenn Rust verwendet werden soll, dann vor der Einführung von C++
    • Es wäre gut, wenn der Rust-Compiler von C aus bootstrappbar wäre
    • Frühere Versionen von rustc werden jedoch mit früheren Versionen von rustc kompiliert
    • Der OCaml-Compiler lässt sich erfolgreich mit Guile kompilieren
    • Der Autor möchte den C++-Schritt entfernen und bevorzugt den C-Schritt
    • Die Motivation des Autors ist nicht klar
  • Um neue Binärdateien für das Zielsystem zu erzeugen, muss rustc dieses System unterstützen

    • Wenn man diese Unterstützung zu rustc hinzufügt, kann es sich selbst bauen
  • Ich stelle mir vor, einen C++-Interpreter oder -Compiler in Scheme zu schreiben

    • Von Scheme direkt zum heutigen gcc zu gelangen, wäre eine enorme Abkürzung
    • Die gängige Meinung ist jedoch, dass das Schreiben eines C++-Compilers nahezu unmöglich ist
  • 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

    • Es wäre interessant, einen Vergleich mit Rust und LLVM zu sehen
    • Viel Glück
  • Man könnte in Erwägung ziehen, FORTH im Bootstrap-Prozess als Teil der Toolchain zu verwenden