JRuby: Implementación de Ruby en la JVM

Publicado el Miércoles, 12 de enero de 2011

JRuby es una implementación 100% Java del lenguaje de programación Ruby. Básicamente es un intérprete de Ruby escrito en Java y que se ejecuta sobre la máquina virtual. Es una de las tantas implementaciones, de las más completas.

JRuby

JRuby

Actualmente Ruby se encuentra en su versión 1.9.2, y la implementación oficial (la más usada - Matz's Ruby Interpreter o MRI) se toma como referencia para la especificación del lenguaje. Esta versión de Ruby corre sobre una máquina virtual específica de Ruby, y está escrita en C. JRuby soporta completamente Ruby 1.8, y se está trabajando en la compatibilidad con 1.9.2. Además de estas dos implementaciones existen también MacRuby (Ruby en Mac OS X), Rubinius, y otras.

La madurez de una implementación es medida (segun Wikipedia) por su habilidad de ejecutar Ruby On Rails. Este punto se denomina la singularidad Rails. Para tener una referencia de la madurez de JRuby, en mayo de 2010 solamente la MRI y JRuby eran capaces de ejecutar Rails sin modificaciones en un ambiente de producción.

¿Por qué JRuby?

No recuerdo cuándo leí por primera vez sobre JRuby, pero esta fue la primer pregunta que vino a mi cabeza. No me terminé de convencer de su utilidad hasta que fui a RubyConf Uruguay (ver resumen de ese día en este enlace).

El tema es que JRuby es sólo Ruby, pero no es sólo Ruby. Se ejecuta sobre la JVM, que tiene bastante trabajados y aceitados varios aspectos de una máquina virtual como el Garbage Collector. Además, tenemos a disposición las miles de herramientas y bibliotecas ya maduras en el ambiente Java, y la integración con todos los demás lenguajes que corren sobre la JVM. Agregarle a eso la cantidad de plataformas en las que puede correr (y la concurrencia).

En resumen, podemos programar en Ruby dentro del ambiente Java, con todas las ventajas que esto nos aporta.

Usando JRuby

Instalarlo es trivial, en mi caso simplemente usé yaourt para descargar e instalar el paquete, pero pueden visitar el sitio web para descargarlo y ver instrucciones de instalación: http://jruby.org/download

Una vez hecho esto, podemos ejecutar código Ruby con JRuby, o escribir un híbrido Ruby Java. Un ejemplo que Charles Nutter - uno de los lead developers y gran evangelista de JRuby - dió en la RubyConf fue levantar un JFrame con JRuby. Es un código bien sencillo, pero en mi caso fue como el golpe que me hizo dar cuenta que se "programa Ruby con Java" (no sé si me explico, en fin, dejo a libre interpretación):

#Usar Java
require "java"
 
#Importar las clases Java requeridas:
include_class javax.swing.JFrame
include_class javax.swing.JLabel
 
#Crear Frame y agregar etiqueta:
f = JFrame.new 'Ventana - JRuby'
f.setSize 400,400
l = JLabel.new 'Hola mundo desde JRuby'
f.add l
f.show

No hay que olvidar además que podemos hacer uso de Ruby On Rails y desplegarlo junto a otras aplicaciones web en un servidor Java como Tomcat.

JRuby 1.6

Esta entrada fue motivada por el lanzamiento de JRuby 1.6.0 RC1. Se trata de uno de los hitos más importantes para JRuby debido a varias razones. Llevó 9 meses de trabajo y algunas de las características destacadas son la compatibilidad con Ruby 1.9, mejoras en el rendimiento y soporte para Windows.

Respecto a la compatibilidad con el lenguaje y la API de Ruby 1.9.2, está casi terminada. Faltan algunas pocas cosas por implementar antes de la versión final. El rendimiento de las llamadas a métodos Ruby ha sido mejorado, reduciendo sustancialmente los tiempos, además de muchas optimizaciones en respuesta a reportes de los usuarios.

Otras mejoras a destacar:

  • Profiler Gráfico incorporado (Más info)
  • Cambios en RubyGems - Actualización a RubyGems 1.4.2 y otros cambios
  • Soporte experimental para API de extensión de C
  • Preview de soporte RubyGems para Maven
  • Compatibilidad y experiencia de usuario mejorada en Windows

Además de todo esto, se hicieron más de 2000 commits y se resolvieron 265 problemas. El desarrollo de esta versión contó con la mayor cantidad arreglos, revisiones y contribuciones de usuarios hasta el momento.

Con todo esto podemos suponer que JRuby está creciendo, y seguirá así por un buen tiempo. Ya presenta una alternativa interesante a Ruby en un contexto de desarrollo específico de Java.

Viniendo de desarrollar en Java y queriendo desarrollar en Ruby, mirar JRuby es como un puente entre ambas. Todavía tengo fijada la idea de aprender Ruby, pero JRuby presenta una oportunidad para ir pensando en mechar Ruby con el trabajo diario en Java.

6 comentarios en este post

Feed de comentarios
  1. Avatar

    Alejandro Segovia 12 enero. 2011 - 16:21

    Muy buen post, Fernando!

    Es interesante ver el tema de utilizar la biblioteca de Java desde un script Ruby.

    Con respecto a lo que mencionabas sobre el soporte experimental para la API de extensión de C, quizás si puedes acceder a java.lang.System, puedas utilizar el método estático “load” o “loadLibrary” (no me acuerdo el nombre) para cargar una biblioteca de enlace dinámico escrita en C. Se supone que JNI está bastante maduro.

    Saludos!
    Alejandro.-

    • Avatar

      Fernando 14 enero. 2011 - 22:58

      Qué bueno que haya gustado el post 🙂

      Sí, por lo que busqué, se podría cargar mediante Java. Supongo que lo implementan para completar la especificación Ruby, aunque puede haber algo más que no estemos viendo por lo que valga la pena trabajar en el soporte de C desde JRuby mismo.

      ¡Gracias por comentar!
      Saludos

  2. Avatar

    eLeuis 10 febrero. 2011 - 21:25

    esto esta de puta madre me gusto! ademas el dia 9 de febrero 2011 salui JRuby 1.6.0 RC 2
    yo tambien pense programar en Ruby pero eran tiempos donde ruby no tenia mucho sentido (la era de RoR) el lenguaje tenia que depurarse mucho y hacer cambion enormes y me lanze a JavaFX pero ahora en estos tiempos Ruby a evolucionado a buen nivel y de JRuby joder que si vuela bien… saludos eLeuis…

    • Avatar

      Fernando 10 febrero. 2011 - 22:52

      ¡Sí que está de puta madre! Jaja.

      Al principio hubo mucho esceptisismo con Ruby, ya que tuvo su época de moda, pero hoy en día ha demostrado que es un lenguaje robusto y maduro.

      Y JRuby es una excelente implementación que viene creciendo mucho. ¡Suerte con esos desarrollos!

      Saludos

  1. chruby – Gestor de instalaciones de Ruby | Picando Código | 12 junio. 2013 - 11:01

    […] implementaciones del lenguaje de programación: MRI (la implementación de referencia de facto), JRuby, Rubinius, etc., y versiones: 1.8 (en desuso, ya no recibe actualizaciones), 1.9.2, 1.9.3 y […]

Dejar un comentario

Toasty!