Un compilador de Rust escrito en C
(notgull.net)¿Por qué escribir un compilador de Rust en C?
-
Hay varias razones por las que mi actividad reciente ha disminuido
- Acontecimientos personales, como la muerte de un familiar
- Más responsabilidades en el trabajo
- Menos entusiasmo por el código abierto
- Enfoque en un proyecto nuevo
-
Este proyecto consiste en escribir un compilador de Rust en C puro
- Escrito en C puro, sin C++,
flex,yaccniMakefile - El nombre del proyecto es Dozer
- Escrito en C puro, sin C++,
¿Por qué hacer esto?
- Hay que entender el bootstrapping y su importancia
- Para ejecutar código Rust, se necesita un compilador
- El compilador principal de Rust es rustc
- rustc está escrito en Rust y se necesita para compilar código Rust
- Para compilar rustc, se necesita una versión anterior de rustc
- Las primeras versiones de rustc estaban escritas en OCaml
- El compilador de OCaml puede compilarse con Guile, y Guile está escrito en C
El principio del descenso
-
Introducción al proyecto Bootstrappable Builds
- Comienza con una semilla binaria de 512 bytes
- A partir de compiladores simples, genera gradualmente compiladores más complejos
- Al final, permite compilar TinyCC, GCC, Linux y más
-
Rust aparece muy tarde en este proceso
- Usa mrustc para compilar rustc versión 1.56
- Si quieres usar Rust antes de introducir C++, no es posible
-
Dozer apunta a ser un compilador de Rust que pueda bootstrappsearse desde C
- Debe poder arrancar desde TinyCC
Plan
-
Trabajo en Dozer durante los últimos dos meses
- Puede compilarse con TinyCC y cproc
- Usa QBE como backend
- Actualmente ya están listos el lexer y parte del parser
- La expansión de macros/módulos se está posponiendo
- La verificación de tipos solo soporta
i32 - La generación de código aún es limitada
-
Planes a futuro
- Desarrollar Dozer gradualmente hasta poder compilar ejemplos básicos con
libc,libcorey rustc - Crear una herramienta similar a
cargopara poder compilar paquetes de Rust - Eliminar el código generado automáticamente
- Crear un proceso para compilar rustc y
cargo
- Desarrollar Dozer gradualmente hasta poder compilar ejemplos básicos con
Resumen de GN⁺
- Este artículo trata sobre un proyecto para escribir un compilador de Rust en C puro
- Explica la importancia del bootstrapping y el proceso para crear un compilador de Rust de esta forma
- El proyecto Dozer busca ser un compilador de Rust que pueda bootstrappsearse desde C
- Es un proyecto muy desafiante y no está claro si tendrá éxito, pero el intento en sí ya tiene valor
1 comentarios
Opinión de Hacker News
Para hacer el bootstrap de Rust, sería bueno escribir un proto-Rust en C y luego escribir el compilador completo de Rust en proto-Rust
Como hobby, estoy escribiendo un compilador de C en Rust, y lo llamo "Small C Compiler"
printf("Hello World!")typedefEl mismo problema de bootstrap también existe en hardware
Tuve que seguir 4 enlaces para encontrar la ventaja del bootstrap
Si se introduce C++ en la cadena de bootstrap, el bootstrap prácticamente termina ahí
Para generar un nuevo binario en el sistema objetivo, rustc debe soportar ese sistema
Imagino escribir un intérprete o compilador de C++ en Scheme
Mirando todo el stack, podría ser una forma de evitar el problema de "trusting trust"
Me gusta que use QBE como backend
Se podría considerar usar FORTH como parte de la toolchain en el proceso de bootstrap