Bajo el Capó de los Compiladores JIT de Ruby

2025-09-13
Bajo el Capó de los Compiladores JIT de Ruby

Este artículo profundiza en el funcionamiento interno de los compiladores JIT de Ruby, como YJIT y ZJIT. Explica cómo el código compilado JIT coexiste con el bytecode y cómo Ruby cambia entre los modos de ejecución. El artículo también aclara cómo Ruby decide qué métodos compilar (basado en el conteo de llamadas) y cuándo el código compilado JIT regresa al intérprete (por ejemplo, activación de TracePoint o métodos principales redefinidos). En esencia, el compilador JIT de Ruby logra un equilibrio entre rendimiento y corrección a través de un mecanismo ingenioso.

Leer más
Desarrollo

Programación Políglota Impulsada por IA: De Desarrollador Solo en Ruby a Multilingüe en Menos de un Año

2025-07-23
Programación Políglota Impulsada por IA: De Desarrollador Solo en Ruby a Multilingüe en Menos de un Año

Un desarrollador que solo usó Ruby durante una década comparte su viaje para dominar varios lenguajes —C++, C y Rust— en menos de un año, gracias a las herramientas de codificación de IA como Cursor y Claude Code. El autor detalla cómo la asistencia de IA superó los desafíos de aprender lenguajes de programación de sistemas, permitiendo contribuciones eficientes a proyectos como Sorbet, RBS y ZJIT. La IA actuó no como un escritor de código, sino como un compañero de programación con habilidades complementarias, aclarando sintaxis, patrones y respondiendo preguntas, reduciendo drásticamente la curva de aprendizaje y permitiendo contribuciones significativas desde el primer día. Si bien la IA acelera el aprendizaje, la experiencia humana sigue siendo crucial para la corrección de rumbo. El autor cree que la programación asistida por IA es el futuro del desarrollo de software.

Leer más

Ruby 3.5: Asignación de Objetos Seis Veces Más Rápida mediante la Incorporación de Class#new

2025-05-22
Ruby 3.5: Asignación de Objetos Seis Veces Más Rápida mediante la Incorporación de Class#new

Ruby 3.5 logra una aceleración significativa en la asignación de objetos, hasta seis veces más rápido, mediante la incorporación (inlining) del método `Class#new`. El artículo detalla esta optimización, mostrando resultados de benchmarks, analizando los cuellos de botella de rendimiento y explicando la técnica de incorporación. Al eliminar la sobrecarga de las llamadas a métodos, reducir la copia de parámetros y mejorar las tasas de acierto de la caché en línea, esta optimización aborda eficazmente los problemas de rendimiento en la asignación de objetos de Ruby, aunque introduce pequeñas preocupaciones de compatibilidad con versiones anteriores.

Leer más
Desarrollo

Análisis de Tipos Estático para Ruby sin Anotación de Tipos

2025-03-13
Análisis de Tipos Estático para Ruby sin Anotación de Tipos

Los ingenieros de Shopify han desarrollado un novedoso analizador de tipos estático que infiere información de tipos para programas Ruby sin necesidad de anotaciones de tipos. El analizador aprovecha un algoritmo Sparse Conditional Constant Propagation (SCCP) mejorado y un seguimiento preciso del flujo de datos para manejar eficientemente el análisis de tipos interprocedural, completando el análisis en segundos incluso para programas con un gran número de clases. Esta investigación ofrece un nuevo enfoque para optimizar compiladores para lenguajes dinámicos y abre nuevas posibilidades para mejorar el rendimiento en lenguajes dinámicos como Ruby.

Leer más

Acelerando el FFI de CRuby con Compilación JIT

2025-02-12
Acelerando el FFI de CRuby con Compilación JIT

Este artículo explora el uso de la compilación Just-In-Time (JIT) para mejorar el rendimiento de la Interfaz de Función Externa (FFI) de Ruby. Las pruebas de rendimiento muestran las desventajas de rendimiento de FFI en comparación con las extensiones nativas. El autor presenta FJIT, una solución que utiliza RJIT y generación de código de máquina personalizado para generar código de máquina en tiempo de ejecución para llamar a funciones externas, evitando la sobrecarga de FFI. FJIT supera a las extensiones nativas en las pruebas, ofreciendo una alternativa de alto rendimiento para los desarrolladores de Ruby. Actualmente un prototipo que solo admite ARM64, se espera que FJIT se expanda en el futuro a otras arquitecturas y llamadas de funciones más complejas.

Leer más
Desarrollo