Roadmap
El desarrollo de Forja está organizado en 20+ hitos que representan la evolución del compilador, desde un transpilador simple hasta un sistema completo con 2 VMs, JIT nativo (incluyendo tiered), compilador ASM multi-arquitectura, backend de registros, GC generacional, IR SSA, monomorfización, PGO, y runtimes Android + 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: 2 Generaciones de VM
Evolución de la VM Direct Threading hasta el motor ultra rápido con stack caching y acceso O(1) a variables. La VM original (v1) fue removida en 9.0.0.
| VM | Archivo | Líneas | Innovación |
|---|---|---|---|
| v3 — Direct Threading | src/vm_jit.rs | 1570 | Opcodes como u8 planos, arrays paralelos para operandos |
| v5 — Ultra Fast | src/vm_fast.rs | 8694 | Stack caching (top-of-stack register), variables globales O(1), scope_start por frame, GC generacional |
src/vm.rs) fue removida en 9.0.0.✅ 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 |
✅ Hito L: Package Manager + Stdlib (v0.8.0)
Sistema de paquetes funcional: forja add, forja remove, forja install, formato forja.json, y stdlib con fs, json, matemáticas.
| Componente | Estado |
|---|---|
forja add/remove/install — gestión de dependencias | ✅ Completado |
forja.json — configuración de proyecto | ✅ Completado |
PackageResolver — resolución de dependencias | ✅ Completado |
| Stdlib (fs, json, matemáticas, io, resultado) | ✅ Completado |
✅ Hito M: Debugger + LSP + Perf (v0.9.0)
Depurador funcional con DAP, servidor de lenguaje con completado y diagnósticos, y mejoras de rendimiento.
| Componente | Estado |
|---|---|
| LSP — diagnósticos en tiempo real | ✅ Completado |
| LSP — completado, hover, go-to-definition | ✅ Completado |
DAP Debugger (src/debugger.rs) | ✅ Completado |
| 200 ejemplos validados | ✅ Completado |
✅ Hito N: IR SSA + Optimización (v6.0.0)
Representación intermedia en Static Single Assignment entre el AST y el bytecode, con dominator tree, φ-nodes y un backend register-based completo.
| Componente | Estado |
|---|---|
ir.rs — IR SSA, Inst, BasicBlock, φ-nodes | ✅ Completado |
ir_constructor.rs — AST → IR SSA | ✅ Completado |
ir_ssa.rs — dominator tree, loops naturales, inserción de φ | ✅ Completado |
ir_to_bytecode.rs — IR SSA → opcodes | ✅ Completado |
stack_to_reg.rs — bytecode stack → registros virtuales | ✅ Completado |
register_ir.rs — live intervals | ✅ Completado |
register_alloc.rs — linear scan + spill | ✅ Completado |
codegen_reg.rs — x86-64 con encoding REX | ✅ Completado |
✅ Hito Ñ: GC Generacional + Arena + Shapes
Recolector de basura generacional para reemplazar Arc en ForjaFast, más allocator por arenas y shapes de objetos con acceso O(1) a campos.
| Componente | Estado |
|---|---|
gc.rs — young gen (bump) + old gen (mark-sweep) | ✅ Completado |
| Write barriers + remembered set | ✅ Completado |
| Promotion por age (survivor) | ✅ Completado |
gc_intrinsics.rs — safe points, stack maps | ✅ Completado |
arena.rs — arena allocator con scopes | ✅ Completado |
shape.rs — shapes y transiciones de campos | ✅ Completado |
| 10+ tests de GC | ✅ Completado |
✅ Hito O: Monomorfización + PGO + JIT Tiered
Instanciación de genéricos por tipo concreto, optimización guiada por perfiles y compilación JIT en niveles con OSR y deoptimización.
| Componente | Estado |
|---|---|
monomorph.rs — instanciación de genéricos + inferencia | ✅ Completado |
pgo.rs — --pgo=recoger / --pgo=usar | ✅ Completado |
jit_tiered.rs — Interpret → JitSimple → JitOptimized | ✅ Completado |
| OSR (on-stack replacement) en loops | ✅ Completado |
Deoptimización con DeoptFrame | ✅ Completado |
✅ Hito P: Backends LLVM + Incremental + Android
Backend LLVM de registros, cache de compilación incremental persistente y runtime de Forja en Android vía JNI con clases Kotlin y Native Activity.
| Componente | Estado |
|---|---|
backend_llvm.rs — generación de LLVM IR desde el backend de registros | ✅ Completado |
incremental_cache.rs — .forja/cache/ con invalidación transitiva | ✅ Completado |
crates/forja-android-rt — JNI + Kotlin (ForjaRuntime, ForjaSession) | ✅ Completado |
| Native Activity — GUI de Forja en Android | ✅ Completado |
forja construir-apk — template Gradle | ✅ Completado |
✅ Hito Q: GUI WASM (v9.0.0)
Renderizado de interfaces Forja en el navegador: crates/forja-wasm-gui dibuja la GUI en un <canvas> HTML5 con la Canvas 2D API, sin depender de Xilem/Vello.
| Componente | Estado |
|---|---|
forja-wasm-gui — Layout simplificado → Canvas 2D | ✅ Completado |
Exports wasm-bindgen: renderizar, ejecutar_gui, rerenderizar | ✅ Completado |
| Eventos click con hit-testing | ✅ Completado |
| Integración con el playground web | ✅ Completado |
🧩 Features planeadas
Sitio web + Playground integrado
Sitio profesional con playground WASM, documentación y ejemplos en vivo
Documentación completa
Referencia del lenguaje, tutorial, guía de arquitectura, y mejores prácticas
Tuplas y enums nativos
Soporte completo en runtime para tipos compuestos
BD integrada
Soporte completo para BD() con consultas
Inferencia de tipos completa
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, tier 2 SSA/SIMD
Optimizaciones avanzadas
Inline de funciones, eliminación de sub-expresiones comunes, desenrollado de bucles en todos los backends
Más targets ASM
RISC-V, WASM nativo, GPU compute
Package registry
Registro público de paquetes (forja publish) para compartir librerías
CI/CD + Binarios pre-compilados
Builds multi-platform automáticos, releases oficiales
GC en producción
Activar el GC generacional por defecto en ForjaFast con safe points completos