Prelude del Lenguaje
Archivo: src/prelude.rs — 11 líneas
¿Por qué existe?
El prelude define los símbolos, tipos y funciones que están automáticamente disponibles en cada programa Forja sin necesidad de importarlos explícitamente. Es similar al prelude de Rust, Haskell o Elixir: un conjunto de herramientas básicas que forman parte del lenguaje mismo.
Estado actual
Actualmente prelude.rs es un espacio reservado. La función
generar_prelude() retorna un Vec<Declaracion> vacío,
lo que significa que el prelude está aún en fase de diseño. No hay tipos algebraicos
(Resultado, Opcion) definidos como parte del prelude todavía,
aunque el lenguaje ya los soporta como construcciones nativas.
Estructura
generar_prelude()
| Firma | Descripción |
|---|---|
pub fn generar_prelude() -> Vec<Declaracion> |
Genera las declaraciones del prelude que se insertan automáticamente al inicio
de cada módulo raíz. Actualmente retorna un vec vacío, pero está diseñado para
contener:
|
Diseño futuro del prelude
Tipos algebraicos planeados
// Opcion (Option)
tipo Opcion = Algo(valor) | Ninguno
// Resultado (Result)
tipo Resultado = Ok(valor) | Error(valor) Funciones de utilidad planeadas
funcion escribir(valor)
funcion leer() -> Texto
funcion tipo_de(valor) -> Texto ¿Por qué está vacío ahora?
El prelude se dejó intencionalmente vacío durante las fases iniciales de desarrollo
para mantener la flexibilidad. Los tipos algebraicos Resultado y
Opcion (con constructores Ok, Error,
Algo, Ninguno) ya existen como expresiones nativas en el
lenguaje (Expresion::Ok, Expresion::Error,
Expresion::Algo en ast.rs), y se resuelven mediante
bytecode.rs sin necesidad de declaraciones de prelude.
En el futuro, cuando se defina el prelude completo, estos tipos y funciones se generarán como declaraciones AST que se prependen automáticamente a cada módulo antes de la compilación, permitiendo su uso sin importación explícita.
Relación con el resto del compilador
- El prelude se inserta al inicio de cada módulo durante la fase de resolución de módulos
- Complementa la stdlib (
stdlib/std/) que sí requiere importación explícita - Trabaja junto con el ModuleResolver para proporcionar símbolos base