2008-09-30 14 views

Respuesta

149

JRuby es la implementación de ruby ​​que se ejecuta en una JVM, mientras que el rubí de Matz es una implementación de C.

Las principales características a tener en cuenta son:

  1. jruby se ejecuta en Java VM y O es compilado o interpretado a código de bytes de Java.
  2. JRuby puede integrarse con código Java. Si tiene librerías de clases Java (.jar's), puede hacer referencia y usarlas desde dentro del código Ruby con JRuby. En la otra dirección, también puedes llamar al código Jruby desde Java. JRuby también puede usar las capacidades de JVM y del servidor de aplicaciones.
  3. JRuby generalmente se aloja dentro de los servidores de aplicaciones Java, como Glassfish de Sun o incluso el servidor web Tomcat.
  4. Aunque no se pueden usar gemas de rubí nativas con JRuby, existen implementaciones jruby para la mayoría de las bibliotecas populares de ruby.

Hay otras diferencias que se enumeran en la jruby wiki:

+0

Gracias, eso responde a casi todo lo que estaba buscando.:) – epochwolf

+4

oh, y funciona un poco más lento que 1.9 – rogerdpack

+3

Además, JRuby debería tener hilos del sistema operativo nativos reales, como me dicen ... –

3

en su mayoría 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 despliegue.

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

7

puedo estar equivocado, pero creo que se puede empaquetar una JRuby on Rails aplicación de una manera que no se puede hacer con RoR normal: mira a Mingle o similar. Hace posible vender sin dejar caer tus pantalones/abrir el komono.

Dicho esto, no estoy lo suficientemente familiarizado con el empaquetado RoR, así que no me abrace a ella :)

+1

Tiene toda la razón en esto , aunque necesitarás algo como la gema Rawr o Roir para hacer esto por completo (la última vez que usé Mingle, tenía archivos Ruby no ofuscados ...). –

47

me sorprende hay una cosa fundamental que faltan en todas las respuestas a esta pregunta, relacionada con GIL .

La principal diferencia que debe interesar especialmente. en las aplicaciones web como las construidas con Rails es concurrencia verdadera ("Global Interpreter Lock" gratis). Cuando dos subprocesos se están ejecutando (por ejemplo, atendiendo 2 solicitudes de usuario) con JRuby, son capaces de ejecutarse simultáneamente en un solo proceso, mientras que en MRI está el GIL (incluso con subprocesos nativos 1.9) que evita la ejecución de código Ruby en paralelo.

Para un desarrollador de aplicaciones esto es lo primero que debe tenerse en cuenta al considerar JRuby, ya que realmente brilla con config.threadsafe! pero requiere que se asegure de que su código (y su código de gemas) sea "verdaderamente" seguro para subprocesos.