Sobre el proyecto
rucc es un compilador C optimizador en fase temprana escrito en Rust. Según el README, la escalera de objetivos del proyecto es SQLite, luego un nivel intermedio de proyectos C conocidos, después PostgreSQL y, finalmente, el kernel Linux, sin permitir parches de código fuente en esa escalera. El README indica claramente que todavía no compila C. M0 y M1 están completos, etiquetados v0.1.0 y v0.2.0. M0 cubre el espacio de trabajo, la regla de capa verificada, el análisis de argumentos del driver y el plan de fases, el programador de trabajos y CI en Linux, macOS y Windows. M1 es el preprocesador, descrito como terminado: fases de traducción, expansión de macros con conjunto oculto, directivas incluyendo _Pragma y #embed, resolución de includes con #include_next y #pragma once, la familia __has_*, y macros predefinidos generados a partir de la descripción del objetivo. "rucc -E a.c" se describe como un preprocesador real cuyo salida se compara con un compilador de referencia sobre los conjuntos de encabezados glibc y musl. Actualmente, "rucc a.c" imprime el plan de fases e informa que las fases posteriores al preprocesado no están implementadas.
La sección de diseño describe varias decisiones planificadas o en progreso. Las reglas de reescritura y los patrones de selección de instrucciones se escriben en un DSL; el mismo texto de regla se compila en el matcher y se entrega a un solver SMT en CI, y las reglas que el solver no puede validar no entran en el conjunto de reglas. El IR está pensado para no tener poison ni undef. Se planifican e‑graphs acíclicos para reescritura, plegado de constantes y movimiento global de código, con tanto un reescritor de e‑graph como una tubería de pases convencional construidos y medidos para elegir un ganador. Una regla de capa se verifica con cargo xtask layers, asignando rangos a crates de modo que un crate solo pueda depender de rangos estrictamente inferiores. La ruta de compilación pretende no usar ensamblador ni enlazador externos: las instrucciones se codifican a bytes, ELF, Mach‑O y COFF se generan dentro del proyecto, y DWARF se emite dentro del proyecto. El README indica que el enlace todavía llama a un enlazador real antes de la versión 1.0, y que si esto cambiará sigue siendo una cuestión abierta.
El README enmarca los objetivos como afirmaciones medibles sobre corrección, rendimiento de compilación, calidad de código y portabilidad, con metodología y reglas de reporte en spec/16-performance.md antes de que existan resultados. La disposición del repositorio descrita en el README incluye crates para el compilador, build‑tools para el compilador del DSL de reglas y el verificador SMT, crates de runtime compilados para el objetivo, veinte documentos de especificación más diecisiete documentos de compilación cruzada, documentación generada, automatización xtask y pruebas. Las opciones de instalación incluyen binarios preconstruidos para Linux, macOS y Windows con archivos SHA‑256 y atestaciones de procedencia de compilación, así como cargo install rucc. Construir está documentado como git clone, cargo build --release, sin configure, CMake, Python en la compilación, ni generación de código fuera de build.rs y xtask. Las tareas incluyen cargo xtask layers, cargo xtask style y cargo xtask ci. El README enumera como fuera de alcance C++, extensiones de dialecto MSVC, un JIT, MSan y un compilador verificado al estilo CompCert. La licencia es Apache‑2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.