rustc_codegen_jvm es un backend alternativo para el compilador de Rust (rustc) que traduce código fuente escrito en Rust a bytecode de la Java Virtual Machine (JVM) y produce archivos .jar ejecutables compatibles con JVM 8 o superior. El proyecto, alojado en GitHub bajo la cuenta IntegralPilot, conforma una cadena de herramientas completa que abarca desde la representación intermedia de Rust hasta el empaquetado final del archivo JAR.
La arquitectura interna se organiza en varias fases. Primero, el frontend estándar de rustc analiza el código y lo convierte en MIR (Mid-level Intermediate Representation). A continuación, una capa propia bautizada como Object-Oriented MIR (OOMIR) simplifica esa representación intermedia en constructos de estilo orientado a objetos, definidos en src/lower1.rs, lo que facilita la traducción al modelo de la JVM. Sobre OOMIR se aplica un optimizador (src/optimise1.rs) que realiza constant folding, constant propagation, eliminación de código muerto y simplificación algebraica. Una segunda fase de lowering (src/lower2.rs) genera archivos .class mediante la biblioteca ristretto_classfile; después se invoca a R8 para añadir los stack map frames exigidos por JVM 8 y aplicar optimizaciones adicionales, y un java-linker propio agrupa los .class resultantes en un .jar ejecutable con su MANIFEST.MF.
Entre las características ya soportadas figuran aritmética con enteros y flotantes (incluidas las operaciones checked), las estructuras de control if/else, match, for, while y loop, casting y tipos primitivos, llamadas a funciones con recursión y punteros a función, las principales estructuras de datos de Rust (arrays, slices, structs, tuplas y enums), el borrow checker con referencias mutables, implementaciones y traits con despacho dinámico (&dyn Trait), uniones para tipos básicos y closures con captura de variables. El proyecto ofrece además soporte parcial de la biblioteca core para el target JVM, respaldado por un shim implementado en Kotlin que cubre la superficie mínima necesaria para ejecutar código real.
El pipeline se automatiza mediante un script Python (build.py) que orquesta la compilación de la biblioteca shim, los metadatos, el java-linker y el backend de rustc en el orden correcto. Los requisitos son Rust nightly, Gradle 8.5 o superior, JDK 8 o superior y Python 3. La integración con Cargo se realiza activando el flag profile-rustflags en Cargo.toml y copiando las plantillas de configuración que el repositorio incluye.
El repositorio incorpora una batería de tests de integración (tests/binary) que cubre algoritmos clásicos (RSA, búsqueda binaria, Fibonacci, conjetura de Collatz, generador de números primos grandes) y ejemplos específicos del lenguaje (enums, structs anidadas, impl, traits, uniones), verificados en CI tanto en modo debug como en release. El objetivo declarado como próximo hito es la compatibilidad completa con la crate core de Rust, y la licencia es dual MIT/Apache 2.0.
