2008-09-30 96 views

回答

149

JRuby是在JVM上運行,而馬茨的紅寶石是一個C語言實現的Ruby實現。

需要注意的主要特點是:

  1. 的JRuby運行在Java虛擬機的,它要麼編譯或解釋到Java字節碼。
  2. JRuby可以與Java代碼集成。如果您有java類庫(.jar),那麼您可以在JRuby中從Ruby代碼中引用和使用它們。另一方面,您也可以從Java內部調用Jruby代碼。 JRuby還可以使用JVM和應用程序服務器功能。
  3. JRuby通常託管在Java應用程序服務器(如Sun的glassfish或甚至Tomcat Web服務器)中。
  4. 儘管您不能在JRuby上使用本地ruby寶石,但大多數流行的ruby庫都有jruby實現。

有它們在JRuby的維基列出的其他差異:

+0

謝謝,這回答我所尋找的一切。:) – epochwolf 2008-09-30 13:58:59

+4

哦,它的運行速度比1.9慢 – rogerdpack 2010-05-24 21:52:49

3

大多數情況下它應該是一樣的。在jRoR中,您可以訪問RoR中不會有的東西。通常它主要是一個部署問題。

但是,如果你的RoR應用程序使用不具有運行在JVM上等效本機庫,這可以是一個痛苦。然而,大多數庫都有一個非本地版本(至少是我遇到的流行版本)。

7

我可能是錯的,但我認爲你可以打包在Rails中的JRuby應用程序的方式,你不能使用正常的RoR - 看看Mingle或類似的。使它可以銷售,而不會掉下你的褲子/打開komono。

這就是說,我不是回報率足夠包裝熟悉,所以不要抱着我吧:)

47

我很驚訝有一個關鍵的東西都在這個問題的答案失蹤,涉及到GIL

你應該關心的主要區別是esp。在諸如使用Rails構建的Web應用程序中,是真併發性(「Global Interpreter Lock」免費)。當使用JRuby運行兩個線程(例如,提供兩個用戶請求)時,它們能夠在單個進程內同時運行,而在MRI中則有GIL(即使是1.9的本地線程),可以避免並行執行Ruby代碼。

對於應用程序開發人員,在考慮JRuby時首先要記住的是,它確實與config.threadsafe!一起閃耀,但要求您確保代碼(和您的寶石代碼)「真正」是線程安全的。