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.

🔥 Estado actual: Forja v0.7.0 — 28+ módulos, ~12,000+ líneas de Rust, 3 VMs + JIT nativo x86-64, 3 backends de ejecución (VM, ASM, JIT).

✅ 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: 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.

VMArchivoLíneasInnovación
v1 — Originalsrc/vm.rs2040VM stack-based funcional, variables por nombre (HashMap), especialización adaptativa
v3 — Direct Threadingsrc/vm_jit.rs649Opcodes como u8 planos, arrays paralelos para operandos
v5 — Ultra Fastsrc/vm_fast.rs1454Stack caching (top-of-stack register), variables globales O(1), scope_start por frame
💡 ForjaFast v5 es la VM de producción. Las otras se mantienen como referencia educativa y para benchmarks.

✅ 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

🧩 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

🔬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

🎮

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

🔥 ¿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.