Situación del desarrollo del compilador de Rust basado en GCC
- gccrs, el proyecto de compilador de Rust basado en GCC, comenzó en 2014 y tiene como objetivo implementar un compilador de Rust dentro de GNU Compiler Collection (GCC).
- El objetivo de gccrs era ser incluido en la versión GCC 13, pero no se logró, y ahora apunta a ser incluido en GCC 14 (cuyo lanzamiento se espera a mediados de 2024).
- gccrs apunta a Rust versión 1.49, la última versión anterior a la introducción de const generics.
- Uno de los principios importantes del proyecto gccrs es no crear un "superset" de Rust, sino reproducir exactamente la salida de rustc.
- La biblioteca estándar de Rust está compuesta por varios "crates", y gccrs se está enfocando en soportar la compilación de los crates core y alloc.
- Actualmente gccrs no puede compilar estos crates debido a varias funciones faltantes; entre los problemas están la ausencia de un borrow checker y la falta de LLVM intrinsics que GCC no soporta.
Aprovechando las ventajas del ecosistema GCC
- Una de las principales razones del desarrollo de gccrs es permitir el uso de los plugins de seguridad de GCC.
- gccrs ya se está usando en la comunidad homebrew de Sega Dreamcast, y puede utilizar plugins de GCC para realizar análisis estático de código Rust unsafe.
- Gracias al trabajo de gccrs, ha sido posible aportar funciones adicionales a la especificación de Rust, y el proyecto busca participar en la redacción de la especificación oficial de Rust.
Funciones en desarrollo
- gccrs todavía carece de muchas funciones centrales, entre ellas async/await, LLVM intrinsics ausentes en GCC y el macro
format_args!().
- El proyecto Polonius implementa un borrow checker que calcula la vida útil de las referencias con un algoritmo distinto para resolver las desventajas del borrow checker actual de rustc.
- Ya comenzó el trabajo sobre el macro
format_args!(), que es necesario para construir los argumentos que se pasan a otros macros de formateo de cadenas.
rustc_codegen_gcc
- rustc_codegen_gcc es otro proyecto de Rust basado en GCC, más maduro que gccrs y con un alcance más limitado.
- rustc_codegen_gcc usa la biblioteca libgccjit para conectarse a la API del backend LLVM de rustc, y compila en etapas tardías tanto de rustc como de GCC.
- Hasta octubre de 2023, rustc_codegen_gcc puede compilar Rust for Linux sin parches adicionales.
Rust for Linux
- El proyecto Rust for Linux ofrece documentación sobre cómo compilar código Rust para el kernel usando rustc o rustc_codegen_gcc.
- gccrs también apunta a soportar Rust for Linux, pero por la gran diferencia con la versión de rustc actualmente soportada, todavía parece un objetivo lejano.
Opinión de GN⁺
- El proyecto gccrs busca implementar un compilador de Rust basado en GCC, lo que puede aportar diversidad al ecosistema de Rust y ofrecer el potencial de aprovechar herramientas existentes como los plugins de seguridad de GCC.
- Aunque gccrs todavía no puede compilar partes centrales de la biblioteca estándar de Rust, es notable que ya tenga un caso de uso real en la comunidad homebrew de Sega Dreamcast.
- Este artículo ofrece una mirada interesante a las distintas implementaciones de compiladores para el lenguaje Rust y a las posibilidades de expansión del ecosistema que eso conlleva.
1 comentarios
Opiniones de Hacker News
Resumen del primer comentario:
Resumen del segundo comentario:
Resumen del tercer comentario:
Resumen del cuarto comentario:
Resumen del quinto comentario:
Resumen del sexto comentario:
Resumen del séptimo comentario: