Forja

Un lenguaje de programación en español con VM propia, JIT, compilador ASM (x86-64 / ARM64) y playground WASM
⎔ 2 VMs + JIT Nativo 🦀 Rust backend ⚡ Assembly nativo 🎯 Educativo 📦 Ejecutable único 🌐 WASM 🇪🇸 100% español 🔧 Uops 📐 Optimizador 🎨 GUI nativa (Xilem) 🧬 Traits / Genéricos 🧵 Hilos / Canales 🏷️ Atributos / derive 📖 Doc comments 🌀 GC Generacional 🔀 IR SSA ⚙️ Monomorfización 📈 PGO 📶 JIT Tiered 🪟 Registros / REX 🤖 Android (JNI)
🔥 Filosofía: Aprender conceptos modernos de sistemas (ownership, mutabilidad, borrowing, POO, pattern matching) sin la complejidad sintáctica de Rust, y en tu idioma. Todo en un compilador escrito en Rust puro.

Stack tecnológico

ComponenteTecnologíaArchivo(s)
LenguajeRust (edition 2021)src/main.rs, src/lib.rs
CLI20+ comandos en español/ingléssrc/main.rs (2262 líneas)
Lexer + ParserRecursive Descentsrc/lexer.rs, src/parser.rs
TokensDefinición de tokens del lenguajesrc/token.rs
ASTÁrbol de Sintaxis Abstractasrc/ast.rs
SemánticaType Checker + Borrow Checkersrc/semantics.rs (2345 líneas)
Tabla de SímbolosResolución de nombres y ámbitossrc/symbol_table.rs
Descriptores de ClaseMetadatos de clases y herenciasrc/class_descriptor.rs
MonomorfizaciónInstanciación de genéricos + inferenciasrc/monomorph.rs (605 líneas)
IR SSAMid-level IR en Static Single Assignmentsrc/ir.rs, src/ir_constructor.rs, src/ir_ssa.rs
IR → BytecodeTraducción de IR SSA a opcodessrc/ir_to_bytecode.rs
Backend de RegistrosStack→Reg, live intervals, linear scan, x86-64src/stack_to_reg.rs, src/register_ir.rs, src/register_alloc.rs, src/codegen_reg.rs
Bytecode60+ opcodes stack-basedsrc/bytecode.rs (5107 líneas)
Micro-opcodesExpansión + optimización de opcodessrc/uops.rs (832 líneas)
VM v3 DTDirect Threading (u8 planos)src/vm_jit.rs (1570 líneas)
VM v5 Fast 🏆NaN tagging, stack caching, producciónsrc/vm_fast.rs (8694 líneas)
GC GeneracionalYoung bump + old mark-sweep, write barrierssrc/gc.rs, src/gc_intrinsics.rs
Arena / ShapesAlocación por arenas y shapes de objetossrc/arena.rs, src/shape.rs
JIT Nativo ⚡Generación de código x86-64 en memoriasrc/jit.rs, src/jit_engine.rs
JIT TieredInterpret → JitSimple → JitOptimized + OSRsrc/jit_tiered.rs
PGOOptimización guiada por perfilessrc/pgo.rs
Compilador ASMx86-64 Win/Linux, ARM64 + gcc -O2src/compiler_asm.rs (3413 líneas)
Backend LLVMGeneración de LLVM IR + optimizaciónsrc/compiler_llvm.rs, src/backend_llvm.rs
Compilador AOT.exe autónomo con bytecode incrustadosrc/aot.rs, src/selfrun.rs
OptimizadorConstant folding + Dead Code Eliminationsrc/optimizer.rs (2743 líneas)
Cache IncrementalCompilación incremental persistentesrc/incremental_cache.rs
MódulosImportación con seguridad anti path traversalsrc/module.rs
Transpilador RustForja → código Rustsrc/transpiler.rs (3484 líneas)
PreludioFunciones intrínsecas del lenguajesrc/prelude.rs
WASMwasm-bindgen → playground en navegadorcrates/forja-wasm/, crates/forja-wasm-gui/
REPLrustyline, variables persistentessrc/repl.rs
FormatterFormateo automático de códigosrc/formatter.rs
DiagramaHTML interactivo del ASTsrc/diagrama.rs
FFILlamadas a librerías nativas (C)src/ffi.rs
Extensión VSCodeTextMate grammar + snippetsvscode/forja-syntax/
Design by Contractpre/post condiciones, invariantessrc/ast.rs, src/bytecode.rs
Hot ReloadRecargar módulos en calientesrc/module.rs, src/vm_fast.rs
Profiler integradoPerfilado de funciones y VMssrc/fprofiler.rs
Package Manageradd, remove, install, forja.jsonsrc/package_config.rs, src/package_resolver.rs
Debugger DAPDepurador integrado (DAP) + servidorsrc/debugger.rs, src/bin/forja_dap.rs
Servidor LSPLanguage Server Protocol para IDEsrc/bin/forja_lsp.rs, src/lsp/
GUI NativaXilem runtime, ventanas nativascrates/forja-gui-rt/ (gui_nativa.rs 6905 líneas)
GUI WASMGUI Forja en Canvas 2D para navegadorcrates/forja-wasm-gui/
Android RuntimeVM Forja en Android vía JNI (Rust ↔ Kotlin)crates/forja-android-rt/
Procesos WinProcesos nativos de Windowssrc/native_proceso_win.rs
Sistema de ErroresMensajes de error educativos en españolsrc/error.rs
Base64Codificación/decodificación Base64src/base64.rs
CriptografíaAES-GCM, ChaCha20-Poly1305, cifrado simétricosrc/crypto.rs (1004 líneas)
Criptografía Post-CuánticaML-KEM, ML-DSA, SLH-DSA (FIPS 205/206)src/crypto_pq.rs
HashBLAKE3, SHA-2, SHA-3 familia completasrc/hash.rs
Memory-Mapped FilesE/S de archivos mapeados en memoriasrc/mmap.rs
HTTP/2 Nativo (Core)Implementación HTTP/2 sobre h2 cratesrc/native_h2_core.rs (1370 líneas)
HTTP/2 Nativo (TLS)Soporte TLS para HTTP/2 nativosrc/native_h2_tls.rs
Registro NativoFunción FFI masiva: 4700+ líneas de bindingssrc/native_registry.rs (4707 líneas)
SQLite NativoBindings directos a libsqlite3src/native_sqlite.rs
SandboxAislamiento de red/archivos/procesossrc/sandbox.rs, stdlib/std/sandbox.fa
TerminalUtilidades de terminal (colores, cursor)src/terminal.rs
stdlib IncrustadaMódulos de std empaquetados en el binariosrc/stdlib_embedded.rs
API PúblicaBiblioteca pública para integración (lib)src/lib.rs (814 líneas)
LSP CompletadoCompletado inteligente para IDEsrc/lsp/completado.rs
LSP FirmaFirma de funciones en hoversrc/lsp/firma.rs
LSP Índice stdlibÍndice de módulos stdlib para LSPsrc/lsp/index_stdlib.rs
LSP SnippetsSnippets de código para IDEsrc/lsp/snippets.rs

Hola, Mundo

Así de simple es escribir tu primer programa en Forja:

📄 hola_mundo.fa
// Tu primer programa en Forja
escribir("¡Hola, mundo desde Forja!")

¿Por qué Forja?

🌎

100% en español

Keywords, errores, documentación y mensajes completamente en español. Ideal para hispanohablantes.

🦀

Escrito en Rust

70+ módulos de Rust puro (~94,000+ líneas de Rust, ~6,800 líneas de stdlib en Forja). Sin dependencias externas para el núcleo del compilador (ni serde, ni JSON, ni runtime pesado).

VMs + JIT

ForjaFast (v5) con NaN tagging y stack caching como VM de interpretación, más la VM Direct Threading (v3) y el JIT nativo x86-64.

JIT Nativo + ASM

JIT nativo x86-64 en memoria (7x más lento que Rust). Compilador a assembly x86-64/ARM64 con gcc -O2 para velocidad nativa (~80x más rápido que Python).

📦

Ejecutable único

Generá un .exe autónomo con la VM + bytecode incrustado. Funciona en cualquier PC sin dependencias. Tecnología selfrun.

🔍

Borrow Checker

Análisis de ownership y préstamos al estilo Rust, con mensajes de error educativos en español con sugerencias.

💬

REPL interactivo

Probá código línea por línea con feedback inmediato. Las variables persisten entre líneas. Ideal para aprender.

🧱

POO nativa + Pattern Matching

Clases, constructores, métodos, herencia de campos. Y también coincidir/caso con tipos algebraicos (tipo).

🌐

Playground WASM

Compilador y VM compilados a WebAssembly. Ejecutá Forja directamente en el navegador sin instalar nada.

🔧

Micro-opcodes (Uops)

Sistema de expansión de opcodes compuestos a micro-operaciones. Permite optimizaciones como fusión de opcodes y eliminación de push/pop redundantes.

📐

Optimizador de AST

Constant folding en tiempo de compilación y eliminación de código muerto (DCE). Código más eficiente sin esfuerzo.

📂

Sistema de módulos

Organizá tu código en archivos separados con importar. Resolvedor con protección contra path traversal.

🔒

Design by Contract

Precondiciones (requiere), postcondiciones (asegura) e invariantes (siempre) para código más confiable.

🔄

Hot Reload

Recargá funciones y módulos sin reiniciar. Ideal para desarrollo interactivo con feedback inmediato.

📊

Profiler integrado

Perfilá tiempos de ejecución por función. Descubrí cuellos de botella sin herramientas externas.

🔀

IR SSA + Backend de Registros

Mid-level IR en Static Single Assignment con φ-nodes y dominator tree, más un backend register-based completo: stack→registros, live intervals, linear scan y generación x86-64 con encoding REX.

🌀

GC Generacional

Garbage collector generacional: young generation con bump allocation y old generation con mark-sweep. Write barriers, remembered sets y promoción por edad para reemplazar Arc en ForjaFast.

⚙️

Monomorfización de Genéricos

Instanciación de funciones y clases genéricas por tipo concreto (obtener_Entero), con inferencia de tipos desde los argumentos. Elimina el dispatch dinámico.

📈

PGO + JIT Tiered

Optimización guiada por perfiles (--pgo=recoger/usar) y compilación en niveles con contadores de hotness, OSR y deoptimización.

🔷

Compilador LLVM

Backend alternativo que genera LLVM IR. Optimizaciones avanzadas y potencial multi-plataforma con el pipeline LLVM.

🤖

Android Runtime

La VM de Forja corre en Android vía JNI con clases Kotlin (ForjaRuntime, ForjaSession) y Native Activity para la GUI. Compilá tu app con forja construir-apk.

Forja en acción

Mirá cómo se ve el código Forja comparado con Rust. La sintaxis es más natural para hispanohablantes:

🔥 forja/ejemplo.fa🦀 rust/ejemplo.rs
// ——————— Forja ——————————————————————— // ——————— Rust —————————————————————
funcion factorial(n) {                    // fn factorial(n: i64) -> i64 {
    si (n <= 1) {                           //     if n <= 1 {
        retornar 1                               //         return 1
    }                                         //     }
    retornar n * factorial(n - 1)                //     n * factorial(n - 1)
}                                             // }

escribir(factorial(5))                           // println!("{}", factorial(5))
// → 120                                        // → 120

Probá Forja ahora

Elegí tu forma preferida de usar Forja:

⚡ Modos de ejecución
# Assembly nativo (MÁS RÁPIDO ⚡) — x86-64 o ARM64
forja build-asm ejemplos/01_hola.fa -o programa

# Transpilar a Rust
forja transpile ejemplos/01_hola.fa -o programa.rs

# Ejecutar en VM (4 versiones disponibles)
forja run ejemplos/01_hola.fa

# GUI interactiva (requiere --features gui)
cargo run --features gui --bin forja -- run --native ejemplos/204_login_final.fa

# Modo interactivo
forja repl

# Ejecutable autónomo (VM + bytecode)
forja build ejemplos/01_hola.fa -o programa.exe

# En el navegador (WASM)
# Abrí la página de Playground
📊 Comparación de velocidad entre modos
Modofib(30)Bucle suma 10Mnested_loop(1000)vs Rust nativo
🦀 Rust nativo~1.94 ms~2.28 ms~0.044 ms1.0x
transpile (Forja AOT + rustc -O)~1.94 ms~2.28 ms~0.044 ms~1.0x
build-asm (gcc -O2)54.94 μs~2.3x
JIT Nativo x86-64153.18 μs7.0x
🐍 Python (CPython 3.12)77.15 ms320 ms3.62 ms~40–140x
run (ForjaFast v5 🏆)113.99 μs9,544 μs~437x
run --vm jit (VM v3 DT)28.59 μs34,864 μs~1,597x

Benchmarks actualizados al 9 Jul 2026. Forja AOT transpile + rustc -O rinde igual que Rust nativo (mismo backend LLVM). Los benchmarks de VM varían según el hardware.

Empezá a escribir en 5 minutos

Esto es todo lo que necesitás saber para arrancar:

📝 Conceptos básicos
// Variables mutables e inmutables
variable nombre = "Gaucho"
constante edad = 30

// Condicionales en español
si (edad >= 18) {
    escribir(nombre + " es mayor de edad")
} sino {
    escribir(nombre + " es menor")
}

// Bucles
para (variable i = 0; i < 5; i = i + 1) {
    escribir("Iteración " + i)
}

// Funciones
funcion suma(a, b) {
    retornar a + b
}
escribir("2 + 3 = " + suma(2, 3))

// Clases
clase Persona {
    nombre
    constructor(n) {
        este.nombre = n
    }
    funcion saludar() {
        escribir("Hola, soy " + este.nombre)
    }
}

variable p = nuevo Persona("Ana")
p.saludar()

// Pattern matching
coincidir (dia) {
    caso 1 { escribir("Lunes") }
    caso 2 { escribir("Martes") }
    caso _ { escribir("Otro") }
}

// Tipos algebraicos (enums)
tipo Resultado = Exito(Entero) | Error(Texto)

// Arreglos y mapas
variable arr = [1, 2, 3]
variable m = "nombre": "Ana", "edad": 30

Pipeline de compilación

Forja transforma tu código a través de 5+ fases, pudiendo generar Rust, bytecode (para 2 VMs), assembly nativo, LLVM IR, o ejecutarse en el navegador via WASM:

🔀 Arquitectura completa
┌─────────┐   ┌───────┐   ┌─────┐   ┌──────────────┐   ┌──────────┐   ┌─────────────┐
│ Source  │ → │ Lexer │ → │Parser│ → │Type + Borrow │ → │Optimizer │ → │ Transpiler  │ → Rust .rs
│  .fa    │   │       │   │     │   │   Checker    │   │(fold+DCE) │   │             │
└─────────┘   └───────┘   └─────┘   └──────────────┘   └──────────┘   └─────────────┘
                                                │  Monomorfización (monomorph.rs)
                                                ▼
                                       ┌──────────────┐   ┌──────────────────────┐
                                       │   IR SSA     │   │ Backend de Registros │
                                       │ (ir_constructor│  │ stack_to_reg → reg IR│
                                       │  → ir_ssa)   │   │ → register_alloc     │
                                       └──────┬───────┘   │ → codegen_reg (x86)  │
                                              │            └──────────────────────┘
                                       ┌──────▼───────┐
                                       │ IrToBytecode │
                                       └──────┬───────┘
                                       ┌──────▼───────┐
                                       │ Bytecode Gen │
                                       │  (bytecode)  │
                                       │       ↓      │
                                       │    Uops      │
                                       │ (expansión)  │
                                       └──────┬───────┘
                                              │
        ┌─────────────────────────────────────┼───────────────────────────────┐
        ▼                                     ▼                               ▼
┌──────────────┐   ┌──────────────┐   ┌──────────────┐   ┌────────────────┐   ┌──────────────┐
│ Compilador   │   │ 2 VMs        │   │ JIT Tiered   │   │ Backend LLVM   │   │ AOT + Self   │
│ ASM → .exe   │   │ vm_jit/      │   │ interpret →  │   │ (backend_llvm) │   │ Run → .exe   │
│ (gcc -O2)    │   │ vm_fast 🏆    │   │ jit → opt    │   └────────────────┘   │ autónomo     │
└──────────────┘   └──────────────┘   └──────────────┘                        └──────────────┘
                                                     │
                                              ┌──────▼──────┐
                                              │ WASM (web)  │ → Playground + GUI WASM
                                              └─────────────┘

Arquitectura de ejecución

Forja tiene 5 estrategias de ejecución ordenadas por velocidad:

#EstrategiaMóduloVelocidadDescripción
1Assembly nativocompiler_asm.rs⚡⚡⚡⚡⚡Forja → .s + gcc -O2. Velocidad C/Rust. Multi-arquitectura.
2Transpilación a Rusttranspiler.rs⚡⚡⚡⚡⚡Forja → .rs + rustc. Código compilado nativo.
3Backend de Registroscodegen_reg.rs⚡⚡⚡⚡IR SSA → register IR → linear scan → x86-64 con encoding REX.
4JIT Nativo / Tiered (x86-64)jit.rs, jit_tiered.rs⚡⚡⚡Código máquina generado en memoria con tiers y OSR.
5ForjaFast (VM v5)vm_fast.rs⚡⚡VM con NaN tagging + stack caching + superinstrucciones + GC.
6VM v3 Direct Threadingvm_jit.rsVM educativa para referencia y benchmarks.

Documentación

📖

Instalación

Compilá Forja desde el código fuente. Solo necesitás Rust.

Uso (CLI)

Todos los comandos: run, build, build-asm, transpile, repl, fmt, y más.

📝

Ejemplos

200+ ejemplos comentados, desde hola mundo hasta juegos completos, algoritmos y GUI.

🔧

Sintaxis

Referencia completa del lenguaje: tipos, funciones, clases, módulos.

🏗️

Arquitectura

Pipeline, VM, bytecode, JIT, compilador ASM, WASM, y más.

🚫

Errores

Sistema de errores educativo con sugerencias en español.

🔄

Roadmap

Estado del proyecto y próximos pasos.

🎮

Playground

Probá Forja en el navegador con WASM. Sin instalación.