Prelude del Lenguaje

Archivo: src/prelude.rs11 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()

FirmaDescripció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:
  • Definiciones de tipos algebraicos básicos (Resultado, Opcion)
  • Funciones de utilidad global (escribir, leer, etc.)
  • Re-exports de la stdlib más común
  • Macros de conveniencia

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