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?
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?
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:
Otras diferencias que se enumeran en el wiki de JRuby:
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.
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 :)
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).
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 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.