Ruby和JRuby有什么区别?

53

请问有没有人能用通俗易懂的语言解释一下,开发 JRuby 和 Ruby 以及 Rails 应用之间的区别?

我使用 NetBeans 作为我的 Ruby on Rails IDE,每次创建项目时都会问我这个问题 - 我真的不明白它们之间的区别。它们有什么优缺点吗?

8个回答

64

Ruby运行在一个基于本地C的解释器中,而JRuby运行在Java虚拟机内部。对于一些具有本地C扩展的插件和gems,则需要重写以在Java环境下运行。

最终的区别在于您想实际部署应用程序的方式(假设您想使用的gems不是问题)。如果您想要部署到Java Web服务器,则应选择JRuby。如果您有一个*nix环境,那么Passenger+Nginx或Apache也很受欢迎,它们使用标准的ruby或ruby企业解释器。还可以使用mongrel或thin集群选项,同样使用标准解释器。


27

JRuby 运行在 Java 虚拟机上(解释器是用 Java 写的),而原始的 Ruby 解释器是用 C 写的。两者都有优缺点,比如 Ruby 可以使用本地扩展,JRuby 可以访问 Java 类型、对象等。

JRuby 使用 Ruby 1.8.6 的语法,1.9.x 很快就会可用。JRuby 具有 Java 线程(意味着它可以扩展到多个 CPU、核心等),而 Ruby 在用户空间线程方面存在一些问题,锁定等。

我个人使用 JRuby、Glassfish v3 和 Netbeans 进行 RoR 开发,它比 ruby + 大量 mongrels、Apache 更好地扩展,并且更容易管理。


感谢确认,JRuby使用Ruby的语法。 - nanosoft
这似乎是唯一提到与其他Java代码和Java线程集成的答案,这些似乎是非常重要的细节。 - maurice

4

JRuby 是 Ruby 的 Java 实现。它兼容 Ruby 1.8,但落后于当前的 Ruby(1.9)。它运行在 JVM 上,可以轻松地集成现有的 Java 库。


4

JRuby大多数情况下与Ruby兼容。JRUBY的一个方面是,您可以以非兼容模式运行它,以提高性能


3
Ruby是一种编程语言。JRuby是Ruby编程语言的一个实现。
询问两者之间的区别并没有什么意义:它们处于完全不同的抽象级别。
这就像询问汽车和普锐斯之间的区别一样。这也没有意义:普锐斯是汽车这个概念的一个实现。你可以问普锐斯和悍马之间的区别,或者汽车和飞机之间的区别,但汽车和普锐斯之间的区别没有意义。
同样地,对于Ruby,你可以问Ruby和Python之间的区别,或者JRuby和MRI之间的区别,但Ruby和JRuby之间的区别没有意义。

1
我的意思更多的是,为什么要使用本地的Ruby而不是JRuby(或反之),以及为什么 - 但我投票支持这个答案,因为它确实为我澄清了一些区别。干杯。 - Ash
70
我理解这个回答的意图,但它并没有真正回答问题。显然Ash想问的是MRI和JRuby之间的区别,你可以在不那么吹毛求疵的情况下澄清,并回答问题。 - Edgar Gonzalez
6
很高兴看到你花了很多功夫去质疑别人的问题,但很遗憾的是,在此过程中你并没有为社区做出任何贡献 :D。我在你的回答中没有看到关于MRI的提及。 - Steve Robinson
7
不妨不要像计算机错误信息一样表现,而是试着理解并回答用户的意图或缺乏知识,如果您深刻理解问题的无效性,那就更好了。“太好了,我的问题是无效的,人们在那时停止交谈,即使他们理解我的问题的意图。我想从现在开始,我将不再期望得到答案,而是在寻求进一步知识或解决我的无知之前,必须小心翼翼地行事。” - ahnbizcad
1
@gwho:还有问题作者的“谢谢”评论。对我来说,帮助人比声誉更重要,如果问题的作者说我帮了他,那就足够了。 - Jörg W Mittag
显示剩余3条评论

2

0
据我所知,jruby只是用Java编写的Ruby实现,因此可以轻松地与Java运行时集成。

0

JRuby 是 Ruby 编程语言的 Java 实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接