Saltar al contenido

Fase 7 — Lenguaje inicial

Fase 7 — Lenguaje inicial

Enlace a esta sección

Estado: 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, mutable como alias individual de mut y pareja variable 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.
  • struct con campos indentados; enum con variantes indentadas; en modo llaves se aceptan items Rust con llaves, incluidos métodos impl y 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.
  • principal genera la función Rust main; 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_rustc genera y compila con Cargo/rustc las aliases ejecutables; comprueba error_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 escape r#.
  • 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ón

Los 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 indentacion
estructura 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ón

Verificació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.