2008-09-30 67 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!一起闪耀,但要求您确保代码(和您的宝石代码)“真正”是线程安全的。