Un compilateur Rust écrit en C
(notgull.net)Pourquoi écrire un compilateur Rust en C ?
-
Il y a plusieurs raisons à la baisse récente de mon activité
- des événements personnels, comme un décès dans la famille
- une augmentation de mes responsabilités au travail
- une baisse de ma motivation pour l’open source
- une concentration sur un nouveau projet
-
Ce projet consiste à écrire un compilateur Rust en pur C
- écrit en pur C, sans C++, ni
flex,yaccouMakefile - le projet s’appelle Dozer
- écrit en pur C, sans C++, ni
Pourquoi faire cela ?
- Il faut comprendre le bootstrapping et son importance
- pour exécuter du code Rust, il faut un compilateur
- le compilateur principal de Rust est rustc
- rustc est écrit en Rust et il est nécessaire pour compiler du code Rust
- pour compiler rustc, il faut une version précédente de rustc
- les premières versions de rustc étaient écrites en OCaml
- le compilateur OCaml peut être compilé avec Guile, qui est écrit en C
Le principe de descente
-
Présentation du projet Bootstrappable Builds
- il démarre à partir d’une seed binaire de 512 octets
- il génère progressivement des compilateurs de plus en plus complexes à partir d’un compilateur simple
- au final, il peut compiler TinyCC, GCC, Linux, etc.
-
Rust arrive très tard dans ce processus
- utilisation de mrustc pour compiler rustc version 1.56
- si l’on veut utiliser Rust avant l’introduction de C++, ce n’est pas possible
-
Dozer vise à devenir un compilateur Rust bootstrapable en C
- il doit pouvoir être bootstrapé avec TinyCC
Plan
-
Travail sur Dozer au cours des deux derniers mois
- compilation possible avec TinyCC et cproc
- utilisation de QBE comme backend
- le lexer et une partie du parseur sont actuellement terminés
- l’extension des macros/modules est reportée
- la vérification de types ne prend en charge que
i32 - la génération de code est encore insuffisante
-
Plan pour la suite
- faire progresser Dozer étape par étape afin de pouvoir compiler des exemples de base utilisant
libc, puislibcore, puis rustc - créer un outil similaire à
cargopour compiler des paquets Rust - supprimer le code généré automatiquement
- créer un processus permettant de compiler rustc et
cargo
- faire progresser Dozer étape par étape afin de pouvoir compiler des exemples de base utilisant
Résumé de GN⁺
- Cet article présente un projet visant à écrire un compilateur Rust en pur C
- Il explique l’importance du bootstrapping et le processus de création d’un compilateur Rust par ce biais
- Le projet Dozer vise un compilateur Rust bootstrapable en C
- Le projet est très ambitieux, et sa réussite reste incertaine, mais la tentative elle-même a du sens
1 commentaires
Commentaires sur Hacker News
Pour amorcer Rust, il vaudrait mieux écrire un proto-Rust en C, puis écrire le compilateur Rust complet en proto-Rust
J’écris un compilateur C en Rust comme passe-temps, que j’appelle "Small C Compiler"
printf("Hello World!")typedefLe même problème d’amorçage existe aussi dans le matériel
J’ai dû suivre quatre liens pour trouver l’intérêt du bootstrapping
Dès que le C++ est introduit dans la chaîne d’amorçage, l’amorçage est pratiquement terminé
rustcsont compilées avec des versions antérieures derustcPour générer un nouveau binaire sur le système cible,
rustcdoit prendre en charge ce systèmerustc, il peut ensuite se compiler lui-mêmeJ’imagine écrire un interpréteur ou un compilateur C++ en Scheme
En regardant toute la pile, cela pourrait être une manière de contourner le problème du "trusting trust"
J’aime bien l’utilisation de QBE comme backend
On pourrait envisager d’utiliser FORTH comme partie de la chaîne d’outils dans le processus d’amorçage