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.

🔥 Estado actual: Forja v9.0.0 — 70+ módulos de Rust (~94,000+ líneas), 2 VMs + JIT nativo x86-64 (tiered), backends de ejecución (VM, ASM, registros, JIT, LLVM), package manager, stdlib, LSP + DAP, GC, Android runtime.

✅ 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!

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

VMArchivoLíneasInnovación
v3 — Direct Threadingsrc/vm_jit.rs1570Opcodes como u8 planos, arrays paralelos para operandos
v5 — Ultra Fastsrc/vm_fast.rs8694Stack caching (top-of-stack register), variables globales O(1), scope_start por frame, GC generacional
💡 ForjaFast v5 es la VM de producción. La VM original (v1, 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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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.

ComponenteEstado
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

🔥 ¿Querés contribuir? Forja es código abierto (source-available). Si te interesa alguna de estas features, ¡podés empezar a implementarla! Mirá la arquitectura para entender la base.