Especificación del lenguaje Óxido 0.1
Especificación del lenguaje Óxido 0.1
Enlace a esta secciónEstado: especificación inicial cerrada para iniciar la implementación; aún no describe código implementado.
Fuente normativa: esta especificación y los documentos enlazados abajo.
Edición objetivo de Rust: 2024.
1. Propósito
Enlace a esta secciónÓxido es una sintaxis bilingüe español/inglés para producir Rust estándar. No tiene runtime, type checker, reglas de ownership ni sistema de paquetes propios. Cargo y rustc resuelven compilación, tipos, traits, borrowing, macros y linking.
.ox → lexer/normalizador de Óxido → normalización estructural → Rust tokens/AST → validación sintáctica → Cargo/rustc → binario o biblioteca RustUna construcción solo se anuncia como soportada cuando aparece en la matriz de compatibilidad y supera sus pruebas de aceptación.
2. Documentos normativos
Enlace a esta sección- Gramática inicial
- Modos de sintaxis
- Alias e identificadores
- Matriz de compatibilidad
- Diagnósticos y posiciones
- Pipeline y generación
- Criterios de aceptación
- Arquitectura y reglas estrictas
3. Perfil inicial
Enlace a esta secciónLa especificación define dos modos de bloques: indentation y braces. Un proyecto usa un modo; un archivo no puede cambiarlo. Ambos se traducen a un AST común y al mismo backend.
El frontend propio analiza la selección del modo, alias, balance de grupos, elementos estructurales de Óxido y bloques. En el subconjunto implementado, los aliases se normalizan a tokens Rust fuera de DSL opacas; macros estándar de expresiones admiten aliases anidados. Syn valida la sintaxis y rustc el programa completo. La gramática de expresiones, tipos y patrones sigue siendo Rust, no una gramática española independiente.
4. Configuración
Enlace a esta secciónConfiguración de proyecto:
[language]syntax = "indentation" # o "braces"edition = "2024"syntax es opcional solo si cada archivo .ox empieza con sintaxis indentacion o sintaxis llaves. Si el proyecto define syntax, la declaración inicial por archivo también es opcional, pero, si aparece, debe coincidir. No existe detección automática ni override por archivo. edition admite inicialmente solo 2024.
oxido.toml contiene datos declarativos; no admite código, comandos ni scripts.
5. Principios semánticos
Enlace a esta sección- Los alias son tokens de keyword, no reemplazos de texto.
- Identificadores de usuario, cadenas, comentarios, documentación, rutas y nombres de crates se conservan.
- Los argumentos de macros desconocidas/externas y DSL de metaprogramación se conservan opacos. Los macros estándar expresivos allowlisted pueden normalizar recursivamente aliases en sus expresiones; las cadenas y literales no se cambian.
- Un identificador crudo
r#nombrees un identificador de usuario cuyo nombre esnombre, incluso cuando coincide con un alias Óxido. No activa una keyword. - En bloques indentados, la expresión final sin
;es el valor del bloque. Añadir;la convierte en instrucción y el bloque vale(). - En modo llaves, los terminadores siguen las reglas Rust; no se infieren puntos y coma por saltos de línea.
- Las keywords no crean capacidades Rust inexistentes. Palabras reservadas futuras permanecen reservadas y sin semántica Óxido.
- Tipos, referencias, ownership, borrowing, lifetimes, macros y ejecución conservan semántica Rust.
6. No objetivos de 0.1
Enlace a esta sección- Traducir nombres de tipos, métodos, funciones de bibliotecas o crates.
- Un prelude de aliases de tipos/métodos.
- Expansión propia de macros y traducción de DSLs de macros externas.
- Un type checker o borrow checker propio.
- Aceptar automáticamente toda gramática Rust dentro de bloques indentados.
- Telemetría remota por defecto.
- Convertir el proyecto Óxido en una API/backend o añadir infraestructura que la herramienta local no necesite.
7. Compatibilidad de edición
Enlace a esta secciónLa edición objetivo es Rust 2024. El inventario de palabras estrictas, reservadas y contextuales sigue la referencia de Rust. gen es reservado desde Rust 2024 y se incluye en la tabla de keywords reservadas (Rust Reference: Keywords, Edition Guide: gen). Los identificadores crudos siguen la forma r#ident; Rust excluye de ella _, crate, self, Self y super (Rust Reference: Identifiers).