Saltar al contenido

Fase 5 — Primer compilador funcional

Fase 5 — Primer compilador funcional

Enlace a esta sección

Estado: 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ón

examples/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 con prettyplease.
  • 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 rustc a expresiones y cabeceras de control .ox; errores sin ubicación mapeable se conservan como externos.
  • Comandos CLI exportar, importar, compilar y ejecutar. Solo ejecutar corre el binario generado.
  • Configuración oxido.toml de 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 fn por funcion. 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ón

La 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.

La 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.