Réponses:
JRuby est l'implémentation Ruby qui s'exécute sur une JVM tandis que Ruby de Matz est une implémentation C.
Les principales caractéristiques à noter sont:
Il existe d'autres différences répertoriées sur le wiki JRuby:
Je suis surpris qu'il manque un élément crucial dans toutes les réponses à cette question, lié à GIL .
La principale différence dont vous devriez vous soucier esp. dans les applications Web telles que celles construites avec Rails est une véritable concurrence ("Global Interpreter Lock" gratuit). Lorsque deux threads sont en cours d'exécution (par exemple, servant 2 requêtes utilisateur) avec JRuby, ils sont capables de fonctionner simultanément dans un seul processus, tandis que dans MRI il y a le GIL (même avec les threads natifs de 1.9) qui évite d'exécuter du code Ruby en parallèle.
Pour un développeur d'application, c'est la première chose à garder à l'esprit lors de l'examen de JRuby, car il brille vraiment config.threadsafe!
mais vous oblige à vous assurer que votre code (et votre code de gemmes) est "vraiment" thread-safe.
Je me trompe peut-être, mais je pense que vous pouvez empaqueter une application JRuby on Rails d'une manière que vous ne pouvez pas faire avec un RoR normal - regardez Mingle ou similaire. Permet de vendre sans laisser tomber votre pantalon / ouvrir le komono.
Cela dit, je ne connais pas assez bien les emballages RoR, alors ne me retenez pas :)
la plupart du temps, cela devrait fonctionner de la même manière. dans jRoR, vous pouvez accéder à des éléments que vous n'auriez pas dans RoR. Habituellement, c'est principalement un problème de déploiement.
Cependant, si votre application RoR utilise des bibliothèques natives qui n'ont pas d'équivalent qui s'exécute sur la JVM, cela peut être pénible. Cependant, la plupart des bibliothèques ont une version non native disponible (du moins les plus populaires que j'ai rencontrées).
Il y a déjà de bonnes réponses ici.
eebbesen a déjà couvert les bases, et kares (lui-même!) nous a dit que JRuby n'avait pas de GIL.
J'ajouterai d'un point de vue plus pratique, j'ai lancé des applications sur Ruby on Rails, puis migré vers JRuby pour des raisons de performances.
Il y avait deux principaux avantages en termes de performances: JRuby est (ou était) tout simplement plus rapide que Ruby dans certaines circonstances, et deuxièmement, l'absence de mentions Global Interpreter Lock kares m'a permis de faire du multithreading, ce qui, bien que délicat, débloque des avantages en termes de performances. .
Une très grande application Ruby on Rails portée et exécutée en une heure, des gemmes et tout. Le seul problème réel était que les expressions rationnelles de Java sont légèrement différentes de celles de Ruby. C'est une réalisation monumentale de la part de JRuby.