Máquina Virtual Original (v1) — Removida

Archivo: src/vm.rs (eliminado en 9.0.0)

⚠️ Removida en la versión 9.0.0: La VM original (ForjaVM) fue eliminada del código. ForjaFast (v5) es ahora la única VM de interpretación junto con la VM Direct Threading (vm_jit.rs). Esta página se conserva como referencia histórica de su diseño.

¿Por qué existía?

Era la primera generación de máquina virtual de Forja, diseñada como un intérprete stack-based simple y didáctico. Su propósito era servir como implementación de referencia y para programas pequeños donde el rendimiento no es crítico.

Diseño general

La VM original usaba struct ForjaVM con los siguientes componentes:

CampoDescripción
pc: usizeContador de programa (puntero a la siguiente opcode)
stack: Vec<Valor>Pila de valores operandos (tipos dinámicos vía enum)
globals: HashMap<String, Valor>Variables globales accesibles por nombre
locals: Vec<Valor>Variables locales por índice (acceso O(1))
functions: HashMap<String, Vec<Opcode>>Tabla de funciones definidas por el usuario
builtins: HashMap<BuiltinKind, fn(&mut ForjaVM, usize)>Despacho de built-ins

Loop principal de ejecución

La función ejecutar iteraba sobre el bytecode con un bucle while, usaba match para cada Opcode y actualizaba la pila y el contador del programa.

Migración a ForjaFast

Al eliminar esta VM, las siguientes funciones pasaron a usar ForjaFast: