109 votos

JRuby en Rails vs. Ruby en Rails, ¿cuál es la diferencia?

Estoy buscando probar JRuby y JRuby on Rails. Estoy teniendo problemas para encontrar información sobre cuál es la diferencia entre JRuby on Rails y Ruby on Rails.

¿Cuáles son las diferencias que debo tener en cuenta?

128voto

user23117 Puntos 1292

JRuby es la implementación de Ruby que se ejecuta en una JVM, mientras que Ruby de Matz es una implementación en C.

Las características clave a tener en cuenta son:

  1. JRuby se ejecuta en VM de Java y se compila o se interpreta en código de bytes de Java.
  2. JRuby puede integrarse con código Java. Si tienes bibliotecas de clases Java (.jar), puedes hacer referencia y usarlas desde el código Ruby con JRuby. En la otra dirección, también puedes llamar código JRuby desde Java. JRuby también puede utilizar las capacidades del JVM y del servidor de aplicaciones.
  3. JRuby generalmente se hospeda en servidores de aplicaciones Java como GlassFish de Sun o incluso el servidor web Tomcat.
  4. Aunque no puedes usar gemas nativas de Ruby con JRuby, hay implementaciones de JRuby para la mayoría de las bibliotecas populares de Ruby.

Otras diferencias que se enumeran en el wiki de JRuby:

28voto

kares Puntos 2682

Estoy sorprendido de que haya una cosa crucial que falta en todas las respuestas a esta pregunta, relacionada con GIL.

La principal diferencia en la que debes pensar especialmente en aplicaciones web como las construidas con Rails es la verdadera concurrencia (libre de "Global Interpreter Lock"). Cuando dos hilos están corriendo (por ejemplo, atendiendo a 2 solicitudes de usuarios) con JRuby son capaces de correr concurrentemente dentro de un solo proceso, mientras que en MRI hay el GIL (incluso con los hilos nativos de la versión 1.9) que evita la ejecución de código Ruby en paralelo.

Para un desarrollador de aplicaciones, esta es la primera cosa que debes tener en cuenta al considerar JRuby, ya que realmente destaca con config.threadsafe! pero requiere que asegures que tu código (y el código de tus gemas) sea "realmente" seguro para hilos.

5voto

Nic Wise Puntos 4722

Puede que esté equivocado, pero creo que puedes empaquetar una aplicación de JRuby on Rails de una manera que no puedes hacer con RoR normal: mira Mingle u otras similares. Hace posible vender sin bajarte los pantalones / abrir el kimono.

Dicho esto, no estoy lo suficientemente familiarizado con el empaquetado de RoR, así que no me tomes en cuenta :)

2voto

Michael Neale Puntos 7704

Mayormente debería funcionar igual. En jRoR puedes acceder a cosas a las que no tendrías acceso en RoR. Normalmente es principalmente un problema de implementación.

Sin embargo, si tu aplicación RoR usa bibliotecas nativas que no tienen un equivalente que se ejecute en la JVM, eso puede ser un problema. Sin embargo, la mayoría de las bibliotecas tienen una versión no nativa disponible (al menos las populares que he encontrado).

2voto

user2057354 Puntos 73

Ya hay algunas respuestas excelentes aquí.

eebbesen ya cubrió lo básico, y kares (¡él mismo!) nos ha dicho que JRuby no tiene GIL.

Añadiré desde una perspectiva más práctica, he lanzado aplicaciones en Ruby on Rails, y luego migré a JRuby por razones de rendimiento.

Hubo dos principales beneficios de rendimiento: JRuby es (o era) simplemente más rápido que Ruby en algunas circunstancias, y dos, la falta del Bloqueo del Intérprete Global que kares menciona me permitió hacer multihilo, que, aunque complicado, desbloqueó beneficios de rendimiento de órdenes de magnitud.

Una gran aplicación de Ruby on Rails fue portada y se ejecutó en una hora, gemas incluidas. El único problema real fue que las expresiones regulares de Java son ligeramente diferentes a las de Ruby. Eso es un logro monumental por parte de JRuby.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X