2008-09-30 12 views

Répondre

149

JRuby est l'implémentation de ruby ​​qui s'exécute sur une JVM alors que le ruby ​​de Matz est une implémentation en C.

Caractéristiques à noter sont:

  1. JRuby fonctionne sur Java VM et il est soit compilé ou interprété jusqu'à byte code Java.
  2. JRuby peut s'intégrer avec du code Java. Si vous avez des bibliothèques de classes java (.jar), vous pouvez les référencer et les utiliser depuis le code ruby ​​avec JRuby. Dans l'autre direction, vous pouvez également appeler le code Jruby à partir de Java. JRuby peut également utiliser les capacités de la JVM et du serveur d'applications.
  3. JRuby est généralement hébergé dans des serveurs d'applications Java tels que Glassfish de Sun ou même le serveur Web Tomcat.
  4. Bien que vous ne puissiez pas utiliser les gemmes ruby ​​natives avec JRuby, il existe des implémentations jruby pour la plupart des bibliothèques ruby ​​populaires.

Il existe d'autres différences qui sont répertoriés au wiki JRuby:

+0

Merci, cela répond à peu près tout ce que je cherchais.:) – epochwolf

+4

oh, et il tourne un peu plus lentement que 1,9 – rogerdpack

+3

Aussi, JRuby devrait avoir de vrais threads natifs du système d'exploitation, comme on me dit ... –

3

principalement, il devrait fonctionner de la même manière. Dans jRoR, vous pouvez accéder à des choses que vous n'auriez pas dans RoR. Habituellement, c'est principalement un problème de déploiement. Toutefois, si votre application RoR utilise des bibliothèques natives qui n'ont pas d'équivalent fonctionnant sur la JVM, cela peut être pénible. Cependant, la plupart des bibliothèques ont une version non native disponible (au moins les plus populaires que j'ai rencontrées).

7

Je peux me tromper, mais je pense que vous pouvez emballer un JRuby on Rails application d'une manière que vous ne pouvez pas faire avec RoR normale - regardez Mingle ou similaire. Permet de vendre sans laisser tomber votre pantalon/ouverture du komono.

Cela dit, je ne suis pas assez familier avec l'emballage RoR, donc ne pas me tenir à elle :)

+1

Vous avez absolument raison , bien que vous ayez besoin de quelque chose comme la gemme Rawr ou Roir pour le faire complètement (la dernière fois que j'ai utilisé Mingle, il y avait des fichiers Ruby non obfusqués ...). –

47

Je suis surpris il y a une chose essentielle qui manque dans toutes les réponses à cette question, liée à GIL .

La principale différence que vous devriez vous soucier d'esp. dans les applications Web telles que celles construites avec Rails est true concurrent ("Global Interpreter Lock" gratuit). Lorsque deux threads sont en cours d'exécution (par exemple 2 requêtes utilisateur) avec JRuby, ils peuvent s'exécuter simultanément dans un même processus, alors qu'en MRI, il y a le GIL (même avec les threads natifs de 1.9) qui évite d'exécuter le code Ruby en parallèle. Pour un développeur d'applications, c'est la première chose à garder à l'esprit en considérant JRuby, car il brille vraiment avec config.threadsafe! mais vous oblige à vous assurer que votre code (et votre code gems) soit "vraiment" sûr pour les threads.