Fase 5 — Primer compilador funcional
Fase 5 — Primer compilador funcional
Enlace a esta secciónEstado: completada para la rebanada vertical inicial. Esto no representa compatibilidad general con Rust ni un compilador listo para producción.
Resultado verificable
Enlace a esta secciónexamples/hola_mundo.ox recorre el flujo real .ox → lexer/parser inicial → tokens Rust → Syn → archivo .rs → Cargo/rustc → ejecución. La prueba de integración comprueba la salida exacta Hola, mundo.. La CLI también exporta e importa el subconjunto reversible de funciones libres y comprueba una vuelta .ox → .rs → .ox → .rs comparando el Rust normalizado.
Alcance entregado
Enlace a esta sección- Generación de tokens con
proc_macro2/quote; validación con Syn y formateo conprettyplease. - Mapa lateral serializable entre spans de fuente y Rust generado. Los nombres incluidos son basenames, no rutas absolutas.
- Adaptador Cargo con argumentos separados, sin shell, límite de tiempo, ejecución offline y lectura de eventos JSON.
- Mapeo de diagnósticos
rustca expresiones y cabeceras de control.ox; errores sin ubicación mapeable se conservan como externos. - Comandos CLI
exportar,importar,compilaryejecutar. Soloejecutarcorre el binario generado. - Configuración
oxido.tomlde datos declarativos para resolver el modo del archivo. - Importación restringida a funciones libres admitidas. Se rechazan items y modificadores que no pueden volver de forma reversible. La exportación conserva comentarios ordinarios no opacos insertándolos desde los spans del lexer tras el formateo de Rust; la importación conserva el texto de origen y cambia únicamente
fnporfuncion. La prueba CLI inspecciona ambos archivos y confirma que los comentarios sobreviven a.ox → .rs → .ox → .rs. El formateo puede normalizar espacios y estructura Rust; no promete conservar el formato original. Los comentarios ordinarios dentro de argumentos opacos de macros/atributos se rechazan explícitamente para evitar perderlos o alterar DSLs.
Límites pendientes
Enlace a esta secciónLa sintaxis de items y bloques sigue limitada al alcance inicial de Fases 3 y 4. No se admiten aquí dependencias de usuario, proyectos Cargo arbitrarios, importación general de Rust ni la compatibilidad amplia de la matriz. El flujo no sandboxea código de dependencias o macros: la Fase 5 genera un proyecto controlado sin dependencias de usuario y ejecuta código solo ante el comando explícito ejecutar. Las políticas de confianza para LSP/playground y la ampliación segura de compilación pertenecen a sus fases correspondientes.
La verificación incluye cargo fmt --all -- --check, cargo test --workspace --locked y cargo clippy --workspace --all-targets --locked -- -D warnings. La CI remota del repositorio público está activa y ejecuta los checks del workflow; la evidencia local no sustituye esos resultados.
Decisiones
Enlace a esta secciónLa generación usa tokens Rust y no concatenación de texto; Cargo se invoca mediante Command con argv separados. Los detalles arquitectónicos se registran en ADR 0002, y la matriz de cobertura vigente está en compatibilidad.