JRuby,一个采用纯Java实现的Ruby解释器,由JRuby团队开发。它是一个
自由软件,在CPL/GPL/LGPL三种许可协议下发布。主要开发者有Charles Nutter、Thomas Enebo、Ola Bini、Nick Sieger等。
软件简介
JRuby是面向Ruby、基于Java虚拟机(
JavaOS)的一种解释程序,它结合了
Ruby的简易性和功能强大的JVM的执行机制,包括与Java库全面集成。
Ruby on Rails彻底加快及简化了Web应用的开发,不过它让人觉得不够成熟,特别是在高端企业级功能方面。另一方面,Java平台及其
虚拟机、库和应用服务器的速度、稳定性和功能方面却一直在提升,现在已被公认为是开发高端服务器。
发展沿革
JRuby 最初由 Jan Arne Petersen 于 2001 年创建。在当时和随后的几年里,该代码是
Ruby 1.6 C 代码的直接移植。随着 Ruby 1.8.6 的发布,JRuby 开始努力更新到 1.8.6 的功能和语义。自 2001 年以来,几位贡献者协助了该项目,导致当前(2012)核心团队约6人。
JRuby 1.1 在 JRuby 中添加了 Just-in-
时间 编译和 Advance-of-time 编译模式,并且在大多数情况下已经比当时的 Ruby 1.8.7 参考实现更快。
JRuby 软件包适用于大多数平台;Fedora 9 是最早在 JRuby 1.1.1 中将其作为标准软件包包含的软件包之一。
2009 年 7 月,Sun Microsystems 的核心 JRuby 开发人员 Charles Oliver Nutter、Thomas Enebo 和 Nick Sieger 加入 Engine Yard,继续 JRuby 的开发。2012年5月,Nutter和Enebo离开Engine Yard,前往Red Hat开发JRuby。
JRuby 支持与 Ruby MRI 版本 1.6 到 1.9.3 的兼容性。JRuby 1.0 支持 Ruby 1.8.6,JRuby 1.4.0 将兼容性更新为 Ruby 1.8.7。JRuby 1.6.0 增加了对 Ruby 1.9.2 的同时支持,JRuby 1.7.0 使 Ruby 1.9.3 成为默认执行模式(Ruby 1.8.7 兼容性可通过命令行标志获得)。JRuby 9.0.0.0 增加了对 Ruby 2.2 的支持。
JRuby的当前版本(9.4.3.0)以Ruby 3.1为目标,尽管一些3.1功能仍在开发中。
Ruby on Rails
JRuby从0.9版本(2006年5月)开始能够运行Ruby on Rails的Web框架,并能够执行RubyGems和WEBrick。自从 Sun 聘请了两位首席开发人员以来,
Ruby on Rails 的兼容性和速度有了很大的提高。JRuby 1.0 版本几乎成功通过了 Rails 自己的所有测试用例。从那时起,开发者开始在生产环境中使用JRuby for Rails应用程序。
2008 年 2 月 27 日,Sun Microsystems 和
东京大学宣布了一个联合研究项目,该项目旨在实现一个能够在一个解释器上执行多个
Ruby 或 JRuby 应用程序的虚拟机。
Java虚拟机上的动态调用
JSR 292 (Supporting Dynamically Typed Languages on the JavaTM
Platform)提出:
Sun 开源项目 Multi Language Virtual Machine 旨在对 JSR 进行原型设计。2008年8月底,作为
OpenJDK补丁开发的第一个工作原型发布。
JRuby团队已经在他们的代码库中实现了动态调用。动态调用最初以 1.1.5 版本以原始形式提供。 1.7.0 版本在 Java 8 版本中默认启用了它。
发布历史
此表仅显示 JRuby 历史上出现重要步骤的版本,除了主要修复错误和改进性能的版本。下表中也没有显示性能改进,因为每个版本通常都会带来这样的改进。
功能特点
JRuby是一个纯Java实现的Ruby解释器。通过JRuby,你可以在
JavaOS上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。2006年,SUN雇佣了两名JRuby团队的两名核心成员Charles Nutter和Thomas Enebo全职开发JRuby,后来
思特沃克软件技术有限公司也雇佣了一名JRuby项目的核心成员全职开发JRuby。自此JRuby发展迅速,立刻推出一个50%性能提升的版本。最近又发布了0.9.8版,正式宣布官方支持Rails,单元测试有98%成功通过(也是因此称作0.9.8版?),现在开发小组全力修复剩下的2%,将会很快发布100%支持
Ruby on Rails的JRuby 1.0。但是目前JRuby的主要精力集中在功能实现上,性能还不如理想,1.0发布之后应该就会全力解决性能问题。
软件性能
根据一些基准测试,JRuby 比替代品更快。由于实现在执行之前加载的代码量各不相同,因此不同的速度测量方法可能会导致对性能优势的有偏见的解释。在计算基准测试时,Java
虚拟机本身加载所需的时间通常不包括在执行时间之外。
JRuby 具有显著的架构优势,能够利用
JavaOS 线程而不受全局解释器锁的约束(类似于 Rubinius),从而在进程内实现完全并行,而 Ruby MRI 尽管利用了操作系统线程,但无法实现这一点。
在 2007 年测试的 Mongrel Web 服务器应用程序中,在实例化 Java 虚拟机之后,JRuby 的性能优于 Ruby MRI 1.8。
在 2007 年的 Ruby 实现基准测试中,JRuby 在某些测试中比 Ruby MRI 1.8 更快,但 YARV 的性能优于两者。
截至 2014 年 4 月,在
计算机语言基准测试游戏中,JRuby 1.7.4 通常具有与 Ruby MRI 2.1.0 相同的性能,但使用更多的内存。