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:
| Campo | Descripción |
|---|---|
pc: usize | Contador 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:
ejecutar_vm()enlib.rs— ahora usa ForjaFast- La rama por defecto del REPL (
repl.rs) — ahora usa ForjaFast selfrun.rs(runtime AOT) — ahora siempre usa ForjaFasthomogeneizar_exactose movió avm_jit.rs(su único consumidor)- Se eliminó la opción
--vm vmy la entrada "VM Original" del benchmarkmedir