Máquina Virtual (VM) de Forja

Archivo: src/vm.rs

La VM es el intérprete stack‑based que ejecuta el bytecode generado por el compilador. Está diseñada para ser sencilla, segura y extensible, permitiendo que nuevos back‑ends (ASM, LLVM, WASM) reutilicen la misma lógica de ejecución.

Diseño general

Loop principal de ejecución

Ejemplo: la función run itera sobre el bytecode con un bucle while, usa match para cada Opcode y actualiza la pila y el contador del programa.

El match cubre todos los opcodes definidos en src/bytecode.rs. Cada rama realiza la operación correspondiente sobre la pila o el entorno.

Gestión de funciones

Built‑ins y extensibilidad

Los built‑ins están registrados en VM::register_builtin. Cada builtin recibe una referencia mutable al VM y el número de argumentos que ya están en la pila.

El builtin builtin_escribir escribe en la salida estándar el texto pasado como argumento cuando argc == 1. Se extrae el valor del stack, se verifica que sea Valor::Texto y se imprime usando print!.

Los usuarios pueden añadir nuevos built‑ins mediante la API pública VM::add_builtin que inserta la función en el hashmap.

Errores y depuración

Relación con otros módulos