Roadmap
El desarrollo de Forja está organizado en 10 hitos que representan la evolución del compilador, desde un transpilador simple hasta un sistema completo con 3 VMs, JIT nativo, compilador ASM multi-arquitectura, y playground WASM.
✅ Hito A: Runtime Stub — Ejecutable autónomo
Generar un único .exe que contenga la VM + bytecode incrustado. ¡Un solo archivo que funciona en cualquier PC!
| Componente | Estado |
|---|---|
AOTCompiler — genera .exe con bytecode | ✅ Completado |
selfrun — detección de bytecode incrustado | ✅ Completado |
| Formato binario .fbc (serialización/deserialización) | ✅ Completado |
Comando forja build listo | ✅ Completado |
✅ Hito B: JIT Nativo x86-64
Compilación Just-In-Time a código máquina x86-64 nativo, generando bytes REX/ModRM directamente en memoria. Sin Cranelift/LLVM. Rendimiento: 7x vs Rust nativo, 62x más rápido que ForjaFast.
| Componente | Estado |
|---|---|
jit.rs — NativeJIT: 20+ opcodes x86-64 | ✅ Funcional |
| Aritmética entera y variables en JIT | ✅ Implementado |
jit_engine.rs — orquestador con fallback a ForjaFast | ✅ Implementado |
es_jiteable() — detección de bloques JIT-compilables | ✅ Implementado |
| Soporte para floats, strings y funciones en JIT | 🔄 En desarrollo |
✅ Hito C: POO en VM
Clases, constructores, métodos, nuevo, este, y dispatch en runtime. Programación orientada a objetos completamente en español.
| Componente | Estado |
|---|---|
NewObject, SetField, GetField opcodes | ✅ Completado |
CallMethod con dispatch en runtime | ✅ Completado |
Objetos con Rc<RefCell> | ✅ Completado |
Constructor → método nuevo en bytecode | ✅ Completado |
✅ Hito D: Funciones en VM
Soporte completo para llamadas a funciones con argumentos, retorno y ámbitos anidados dentro de la VM.
| Componente | Estado |
|---|---|
Call / Return opcodes | ✅ Completado |
FunctionDef en bytecode | ✅ Completado |
| Registro de funciones en VM | ✅ Completado |
| Paso de argumentos y ámbitos anidados | ✅ Completado |
✅ Hito E: Optimizaciones de AST
Transformaciones en tiempo de compilación para mejorar el rendimiento sin cambiar el significado del programa.
| Componente | Estado |
|---|---|
Optimizer — constant folding (plegado de constantes) | ✅ Completado |
DeadCodeEliminator — DCE | ✅ Completado |
Integración en pipeline de lib.rs | ✅ Completado |
| Inline de funciones | ⏳ Pendiente |
| Eliminación de sub-expresiones comunes | ⏳ Pendiente |
| Optimización de bucles (desenrollado) | ⏳ Pendiente |
✅ Hito F: 4 Generaciones de VM
Evolución desde una VM simple hasta un motor ultra rápido con stack caching y acceso O(1) a variables. Cada versión es una lección de optimización.
| VM | Archivo | Líneas | Innovación |
|---|---|---|---|
| v1 — Original | src/vm.rs | 2040 | VM stack-based funcional, variables por nombre (HashMap), especialización adaptativa |
| v3 — Direct Threading | src/vm_jit.rs | 649 | Opcodes como u8 planos, arrays paralelos para operandos |
| v5 — Ultra Fast | src/vm_fast.rs | 1454 | Stack caching (top-of-stack register), variables globales O(1), scope_start por frame |
✅ Hito G: Uops y fusión de opcodes
Sistema de micro-opcodes para expandir, optimizar y fusionar el bytecode antes de ejecutarlo.
| Componente | Estado |
|---|---|
Uop enum con micro-operaciones | ✅ Completado |
expandir_a_uops() — expansión de opcodes compuestos | ✅ Completado |
optimizar_uops() — IncrVar, AddAssign, SubAssign | ✅ Completado |
remapear_saltos_uops() — resolución de labels | ✅ Completado |
fusionar_opcodes() — opcodes fusionados (DeclareEnteroOp, etc.) | ✅ Completado |
optimizar_indices() — índices globales únicos | ✅ Completado |
tiene_opcodes_compuestos() — detección de opcodes expandibles | ✅ Completado |
✅ Hito H: Compilador ASM multi-arquitectura
Compilar Forja directamente a assembly nativo para x86-64 y ARM64, con detección automática de plataforma y compilación cruzada.
| Componente | Estado |
|---|---|
| x86-64 Windows (Microsoft x64 calling convention) | ✅ Completado |
| x86-64 Linux (System V AMD64) | ✅ Completado |
| ARM64 AArch64 | ✅ Completado |
Detección automática con cfg!() | ✅ Completado |
Flag --target para compilación cruzada | ✅ Completado |
| Runtime assembly (print_int, print_str, etc.) | ✅ Completado |
| Integración con gcc -O2 | ✅ Completado |
| POO en assembly (objetos, métodos) | ✅ Completado |
✅ Hito I: WASM Playground
Compilar el núcleo de Forja a WebAssembly para ejecutarlo en el navegador.
| Componente | Estado |
|---|---|
Crate forja-wasm con wasm-bindgen | ✅ Completado |
forja_ejecutar() — ejecutar código en VM via WASM | ✅ Completado |
forja_compilar() — transpilar a Rust via WASM | ✅ Completado |
forja_tokenizar() — tokenizar y devolver JSON | ✅ Completado |
| Playground HTML + JS con editor en vivo | ✅ Completado |
| Ejemplos rápidos (Hola Mundo, Variables, Fibonacci, etc.) | ✅ Completado |
✅ Hito J: Módulos e imports
Sistema de módulos para organizar el código en múltiples archivos.
| Componente | Estado |
|---|---|
ModuleResolver — resolución de módulos | ✅ Completado |
| Seguridad anti path traversal | ✅ Completado |
| Cache de módulos ya resueltos | ✅ Completado |
| Imports anidados | ✅ Completado |
✅ Hito K: Extensión VS Code
| Componente | Estado |
|---|---|
| TextMate grammar (syntaxes/forja.tmLanguage.json) | ✅ Completado |
| Language configuration (comentarios, brackets) | ✅ Completado |
| Resaltado de sintaxis para .fa | ✅ Completado |
🧩 Features planeadas
LSP Server
Servidor de lenguaje para completado, diagnósticos y navegación en IDEs
Tuplas y enums nativos
Soporte completo en runtime para tipos compuestos
BD integrada
Soporte completo para BD() con consultas
Tracking completo de tipos no-Copy a través de funciones
JIT híbrido completo
Profiler de hot paths + compilación automática + POO/funciones en JIT
Más ejemplos
Algoritmos, estructuras de datos, juegos, aplicaciones
Optimizaciones avanzadas
Inline de funciones, eliminación de sub-expresiones comunes, desenrollado de bucles
Más targets ASM
RISC-V, WASM nativo, GPU compute
Package manager
Sistema de paquetes para compartir código Forja