Fase 7 — Lenguaje inicial
Fase 7 — Lenguaje inicial
Enlace a esta secciónEstado: completada para el subconjunto documentado y probado aquí. La mayoría de las expresiones, tipos y semántica siguen siendo Rust y las valida Syn y Cargo/rustc.
Alcance implementado y probado
Enlace a esta sección- Variables
let/dejar/variable,mutablecomo alias individual demuty parejavariable mutable, literales, llamadas, operadores y expresiones Rust en el subconjunto del parser. - Funciones, parámetros, tipos de retorno, visibilidad y valores de bloque.
- Condiciones y bucles estructurales cubiertos por Fase 6.
- Tuplas, arrays y tipos primitivos preservados como sintaxis Rust.
structcon campos indentados;enumcon variantes indentadas; en modo llaves se aceptan items Rust con llaves, incluidos métodosimply módulos.- Referencias y borrowing con la semántica estándar de Rust.
- Imports
use/usar,Result/Resultado,Option/Opcion, operador?y aliases iniciales de prelude descritos en la tabla de aliases. principalgenera la función Rustmain;Vector<Cadena>,&texto, métodos comunes y macros allowlisted tienen aliases probados.- El backend incorpora aliases para todas las macros estándar publicadas. La prueba
compiles_all_published_standard_macro_aliases_with_cargo_and_rustcgenera y compila con Cargo/rustc las aliases ejecutables; compruebaerror_de_compilacion!como caso negativo. Las macros externas/desconocidas y DSLs de metaprogramación conservan sus argumentos opacos; los nombres Rust originales siguen válidos. - Atributos allowlisted
#[prueba],#[permitir(...)]y#[derivar(...)]pasan generación y validación Cargo; las colisiones de alias del prelude sugieren escaper#. - Un conjunto inicial de mensajes rustc se traduce a español desde eventos JSON sin perder código ni span; los códigos desconocidos conservan el mensaje original.
- Pruebas end-to-end compilan y ejecutan el ejemplo indentado y el ejemplo de interoperabilidad. También hay un caso negativo para campos mal formados y matriz actualizada.
Forma admitida para items indentados
Enlace a esta secciónLos campos y variantes usan líneas independientes, y el normalizador inserta las comas necesarias antes de validarlos con Syn. Las expresiones/tipos siguen tokens Rust y aliases documentados. Las macros externas mantienen sus argumentos opacos; los aliases no se traducen en atributos desconocidos.
Las importaciones usar pueden omitir el punto y coma de Rust; el backend lo emite al generar el item.
sintaxis indentacionestructura Punto: x: i32 y: i32
enumeracion Estado: Listo(i32)Al cerrar Fase 7, impl, métodos, traits y módulos aún se escribían con llaves Rust, y match no tenía brazos indentados. La Fase 8 ya añade un subconjunto estructural probado de esas formas. Siguen fuera de alcance un traductor completo de mensajes de error, un type checker propio y un runtime propio. Los diagnósticos Cargo traducen un conjunto inicial de códigos comunes y conservan código, span y detalle JSON.
Evidencia local
Enlace a esta secciónVerificación ejecutada: cargo fmt --all, cargo test --workspace --locked, cargo clippy --workspace --all-targets --locked -- -D warnings y npm run build en website/. Los ejemplos compilan/ejecutan con Cargo; el build del portal publica el informe desde Markdown. La decisión del AST estructural está en ADR 0003; la compatibilidad exacta está en la matriz.