Compatibilidad de Óxido 0.1 con Rust
Compatibilidad de Óxido 0.1 con Rust
Enlace a esta secciónEsta matriz describe el alcance verificado, no compatibilidad general con Rust. Rust 2024 es la edición objetivo. La aceptación exige pruebas positivas/negativas y compilación con Cargo/rustc cuando aplique.
| Área | Decisión 0.1 | Estado actual del repositorio |
|---|---|---|
| Funciones libres | Estructura bilingüe en ambos modos; firma preservada como Rust | Parcial: generación y roundtrip de funciones; Cargo/rustc verificado con Hola, mundo |
Variables let |
Alias dejar/variable; mutable equivale a mut, incluida pareja variable mutable |
Implementado y probado en sintaxis/generación; ejecución incluida en ejemplo de prelude |
| Bloques | :+indent o {} según modo, nunca mezclados como bloques |
Parcial: ambos estilos generan AST; generación inicial por AST |
| Valor del bloque | Última expresión sin ; retorna valor; con ; devuelve () |
Parcial: se preservan tail y control final; pruebas de AST y generación |
if/else, loop, while, for |
Keywords bilingües y bloques en ambos modos | Parcial: aliases y ejecución equivalente verificados para funciones/controles; nuevas formas siguen pendientes |
| Tipos, referencias y borrowing | Sintaxis Rust preservada y parseada; semántica a rustc |
Implementado para tipos y referencias Rust del corpus de funciones; préstamo probado end-to-end |
| Tuplas, arrays y tipos primitivos | Sintaxis Rust preservada; semántica a rustc |
Implementado y probado en código ejecutado |
struct, enum, impl, trait, mod, use |
Items con sintaxis Rust o estructura indentada documentada | struct/enum/use indentados desde Fase 7; Fase 8 añade impl, métodos, traits con firmas/defaults y módulos anidados indentados; compilación end-to-end comprobada |
| Expresiones, patrones y genéricos | Tokens Rust; parser Syn; rustc hace validación semántica |
Parcial y con corpus E2E: genéricos/lifetime, bound where, impl Fn, closure, Iterator::find y patrones Some/None ejecutados en ambos modos; cobertura general pendiente |
match |
coincidir expresión: con brazos patrón => expresión o bloque indentado |
Implementado en modo indentación, incluso como inicializador y con bloques de brazo; patrones/guardas/expresiones siguen Rust |
| Macros/atributos | Alias allowlisted de macros estándar; macros declarativas y atributos preservan árboles de tokens, expansión delegada a Rust | Todas las aliases publicadas tienen prueba de normalización; E2E compila/ejecuta aliases estándar y un macro_rules! opaco en nivel superior indentado con #[derive(Debug)]. Macros externas permanecen opacas; sin expansión propia ni traducción de cuerpos macro |
| Comentarios y formato | Los comentarios no se traducen; documentación se representa como atributos doc de Rust |
Comentarios ordinarios se conservan al exportar/importar fuera de grupos opacos; comentarios en macros/atributos opacos se rechazan explícitamente. El comando oxido formato aún no existe; su criterio exige conservar comentarios e idempotencia |
| Identificadores reservados y escape | r#nombre fuerza identificador; colisiones de alias reciben OX3001 cuando corresponda |
Parcial: sugerencia comprobada en funciones, parámetros, patrones anidados, bindings y para; contextos Rust adicionales siguen pendientes |
| Macros procedurales | Cargo/rustc pueden ejecutarlas; no las analiza ni expande Óxido | No implementado |
| Dependencias Cargo | Declaración de crates y resolución delegada a Cargo | Parcial: crates locales por path canónica, dentro del proyecto, probados offline con Cargo/rustc; crates de registro/git y lockfile persistente/versionado pendientes |
Result, Option, ? |
Tipos estándar Rust, con aliases Resultado/Opcion y variantes incluidas en prelude |
Alias de prelude inicial y operador ? probados mediante generación; las rutas externas siguen siendo Rust |
| Colecciones estándar | Vector/Cadena, métodos comunes y módulos std con aliases documentados |
Alias comprobados en generación; ejemplo e2e compila y ejecuta Vector<Cadena>, agregar, largo y macros |
async/await y concurrencia |
asincrono/esperar conservan futures Rust; hilos delegados a std::thread |
Función async con .await compila mediante Cargo; std::thread::spawn compila y ejecuta. Sin executor/runtime async ni matriz de ejecución de futures |
unsafe |
Semántica Rust intacta; oxido auditar-unsafe informa tokens y --rechazar aplica política léxica sin compilar |
.ox reconoce inseguro; .rs reconoce unsafe; omite comentarios/literales. No detecta aún build scripts, macros procedurales, FFI ni llamadas externas y no demuestra ausencia de riesgo |
| Items Rust no listados | Braces: passthrough si Syn y rustc aceptan; indentation: rechazo salvo transformador estructural definido | No implementado |
| Tipos/métodos españoles | Prelude inicial enumerado en aliases; el resto sigue Rust | Parcial por diseño; no implica traducción de crates ni APIs de terceros |
| Mensajes rustc en español | Traducción por código de diagnóstico JSON | Conjunto inicial de códigos; mensajes desconocidos conservan texto original y todos preservan código/span |
| Sistema de tipos/runtime propios | No existen | Fuera de alcance |
“Parcial” significa que existe evidencia para un subconjunto, no que cualquier programa de esa categoría funcione. La rebanada end-to-end actual se documenta en Fase 5. Syn valida sintaxis; solo Cargo/rustc comprueba tipos y compilación. Importar soporta funciones libres reversibles y conserva comentarios ordinarios fuera de grupos opacos; los comentarios dentro de macros/atributos opacos se rechazan. El formato de espacios y estructura Rust puede normalizarse.