Antworten:
JRuby ist die Ruby-Implementierung, die auf einer JVM ausgeführt wird, während Matz's Ruby eine C-Implementierung ist.
Wichtige Merkmale sind:
Es gibt andere Unterschiede, die im JRuby-Wiki aufgeführt sind:
Ich bin überrascht, dass in allen Antworten auf diese Frage im Zusammenhang mit GIL eine entscheidende Sache fehlt .
Der Hauptunterschied, den Sie besonders interessieren sollten. In Webanwendungen, wie sie beispielsweise mit Rails erstellt wurden, ist echte Parallelität ("Global Interpreter Lock" kostenlos). Wenn zwei Threads mit JRuby ausgeführt werden (z. B. zwei Benutzeranforderungen bedienen), können sie gleichzeitig in einem einzigen Prozess ausgeführt werden, während in der MRT die GIL (auch mit den nativen Threads von 1.9) vorhanden ist, die die parallele Ausführung von Ruby-Code vermeidet.
Für einen Anwendungsentwickler ist dies das erste, was Sie bei der Betrachtung von JRuby beachten sollten, da es wirklich gut funktioniert config.threadsafe!
, Sie jedoch sicherstellen müssen, dass Ihr Code (und Ihr Edelsteincode) "wirklich" threadsicher sind.
Ich kann mich irren, aber ich denke, Sie können eine JRuby on Rails-App so verpacken, wie Sie es mit normalem RoR nicht können - schauen Sie sich Mingle oder ähnliches an. Ermöglicht den Verkauf, ohne die Hose fallen zu lassen oder den Komono zu öffnen.
Das heißt, ich bin nicht genug mit RoR-Verpackungen vertraut, also halte mich nicht daran fest :)
Meistens sollte es genauso funktionieren. In jRoR können Sie auf Dinge zugreifen, die Sie in RoR nicht hätten. Normalerweise handelt es sich hauptsächlich um ein Bereitstellungsproblem.
Wenn Ihre RoR-App jedoch native Bibliotheken verwendet, die kein Äquivalent haben, das auf der JVM ausgeführt wird, kann dies schmerzhaft sein. In den meisten Bibliotheken ist jedoch eine nicht native Version verfügbar (zumindest die populären, auf die ich gestoßen bin).
Hier gibt es bereits einige gute Antworten.
eebbesen hat bereits die Grundlagen behandelt, und kares (er selbst!) hat uns mitgeteilt, dass JRuby keine GIL hat.
Aus praktischerer Sicht werde ich hinzufügen, dass ich Apps auf Ruby on Rails gestartet und dann aus Leistungsgründen auf JRuby migriert habe.
Es gab zwei Hauptvorteile bei der Leistung: JRuby ist (oder war) unter bestimmten Umständen einfach schneller als Ruby, und zweitens ermöglichte mir das Fehlen der Erwähnungen von Global Interpreter Lock kares Multithreading, was zwar knifflige, aber Leistungsvorteile in Größenordnungen freischaltete .
Eine sehr große Ruby on Rails-App wurde portiert und lief in einer Stunde, Edelsteine und alles. Der einzige wirkliche Fehler war, dass sich Javas Regexe geringfügig von denen von Ruby unterscheiden. Das ist eine monumentale Leistung von JRuby.