Respuestas:
JRuby es la implementación de Ruby que se ejecuta en una JVM, mientras que Ruby de Matz es una implementación de C.
Las características clave a tener en cuenta son:
Hay otras diferencias que se enumeran en la wiki de JRuby:
Me sorprende que falte algo crucial en todas las respuestas a esta pregunta, relacionadas con GIL .
La principal diferencia que debería preocuparte especialmente. en aplicaciones web como las construidas con Rails es verdadera concurrencia ("Global Interpreter Lock" gratis). Cuando se ejecutan dos subprocesos (por ejemplo, atiende a 2 solicitudes de usuarios) con JRuby, son capaces de ejecutarse simultáneamente en un solo proceso, mientras que en MRI está el GIL (incluso con subprocesos nativos de 1.9) que evita ejecutar código Ruby en paralelo.
Para un desarrollador de aplicaciones, esto es lo primero que debe tener en cuenta al considerar JRuby, ya que realmente brilla config.threadsafe!
pero requiere que se asegure de que su código (y su código de gemas) sean "verdaderamente" seguros para subprocesos.
Puede que me equivoque, pero creo que puedes empaquetar una aplicación JRuby on Rails de una manera que no puedes hacer con RoR normal: mira Mingle o similar. Hace posible vender sin caerse los pantalones / abrir el komono.
Dicho esto, no estoy lo suficientemente familiarizado con el empaquetado de RoR, así que no me sujete a él :)
sobre todo debería funcionar igual. en jRoR puedes acceder a cosas que no tendrías en RoR. Por lo general, es principalmente una preocupación de implementación.
Sin embargo, si su aplicación RoR usa bibliotecas nativas que no tienen un equivalente que se ejecute en la JVM, eso puede ser una molestia. Sin embargo, la mayoría de las librerías tienen una versión no nativa disponible (al menos las más populares que he encontrado).
Hay algunas respuestas geniales aquí ya.
eebbesen ya cubrió lo básico, y kares (¡él mismo!) nos ha dicho que JRuby no tiene GIL.
Agregaré desde una perspectiva más práctica, lancé aplicaciones en Ruby on Rails y luego migré a JRuby por razones de rendimiento.
Hubo dos beneficios principales de rendimiento: JRuby es (o fue) simplemente más rápido que Ruby en algunas circunstancias, y dos, la falta de las menciones de Global Interpreter Lock kares me permitieron hacer subprocesos múltiples, lo que, aunque difícil, desbloqueó beneficios de rendimiento de órdenes de magnitud .
Una aplicación muy grande de Ruby on Rails portó y ejecutó en una hora, gemas y todo. La única falla real fue que las expresiones regulares de Java son ligeramente diferentes a las de Ruby. Ese es un logro monumental por parte de JRuby.