前言

什么JRuby和Ruby

本书是作者运用JRuby语言的实战经验之集成。那么,什么是JRuby语言?这里,我们借用Charles Oliver Nutter和Thomas Enebo在RubyConf上做题为“JRuby: Not Just Another Ruby Impl”的演讲时,对提问“What is JRuby”所做的回答作为答案:

开始于2002年;

Ruby语言的Java实现;

开放源代码,有许多积极的参与者和贡献者;

容易与Java库和架构进行有机的集成(从Java中通过JSR223、BSF调用Ruby,从Ruby中使用Java类)。

针对上述回答,也许人们会继续问Ruby又是什么呢?它是一种功能强大的面向对象的脚本语言,它的创始人是日本的松本行弘(まつもとゆきひろ,英译:Yukihiro Matsumoto,外号Matz)。

JRuby是一个100%的Ruby编程语言的纯Java实现,是在Java虚拟机(JVM)上运行的Ruby。JRuby支持从一个Ruby程序中定义Java类并实现与之交互,此外还对Bean脚本化框架实现支持,JRuby允许Ruby程序直接存取Java类,并允许将它们作为程序内使用的一级对象。官方总结的JRuby语言的主要特性有:

用纯的Java实现的、与Ruby 1.8.6兼容的Ruby解释器;

提供了绝大多数Ruby内置的类;

在Ruby环境内可以与Java类交互,也可以自定义Java类;

支持Bean Scripting Framework(BSF);

三种发行方式:CPL/GPL/LGPL。

JRuby语言的发展

从2002年开始至今,JRuby的版本经历了多次的更新,目前已经发展到了版本1.1RC3。JRuby 1.0主要解决与Ruby的兼容问题,而JRuby 1.1主要解决执行速度的问题。

根据TIOBE Programming Community(www.tiobe.com)对目前流行的计算机程序设计语言的评估排行榜,JRuby语言在2007年11月的排名为第9位,成为排名大幅提升的语言之一。Ruby语言已经进入了主流计算机程序语言的行列。

Ruby语言的Rails框架版本2.0的发布,使得Ruby语言的影响力越来越广泛而且越来越深入。那么,谁在使用Ruby语言的网络应用框架呢?调查结果表明,Ruby语言的Rails框架不仅得到了国际性大公司(如Siemens和IBM等)的采用,而且已为许多著名的大流量应用网站所采用,如综合性社会网站spokeo和人名搜索网站spock。可是在几年前,Ruby语言还是那么地默默无闻和鲜为人知。Rails框架的成功对Ruby语言成为主流语言起到了重要的推动作用。

同时,Rails框架的成功,也吸引了许多企业和开发人员投入到这个新的Ruby语言的框架开发之中,其结果是新的框架如雨后春笋般地涌现,如网络软件框架Waves和Merb,以及桌面软件框架Swing。

NetBeans 6.0可谓是近年来发展最为迅速的一个工具了,今年它又获得了软件业的最高荣誉:Jolt最佳工具奖。NetBeans 6.0是针对JRuby而开发的软件,更重要的是它还包括了Rails框架软件的开发工具。

从技术角度分析,要使一门计算机语言真正走向商业化道路,仅有开发工具是不够的,最重要的是该语言实现的运行环境性能和速度。在这一方面,JRuby语言明显走在了其他语言的前头,如在文章“通用Ruby多虚拟机API研究开始啦”中就已经开始探讨如何解决在Ruby上同时运行一个以上应用时需要多个解释器的问题,文章讨论的目的是如何避免造成内存的浪费。当然,这仅仅是众多深入研究的一个实例。跟其他实现不同的是,JRuby是目前唯一能够在虚拟机上运行的Ruby语言。Ruby语言的虚拟机对程序的性能和速度的提高起了重要的作用。

这里所谈及的虚拟机特指程序虚拟机,即程序的虚拟运行环境,或者更确切地说,是在编译器和运行层面的语言虚拟机。

前面已经提到,一门计算机语言要能够为企业所采用,其性能和速度是重要的因素。虚拟机就是解决这个问题的重要而实质的方法之一。

当前虚拟机正在从单一语言虚拟机向多语言虚拟机方向发展。例如,Java语言虚拟机已经从Java语言变为多种语言共享的虚拟机。我们知道,JRuby语言可以运行在该虚拟机上。尽管CRuby至今还没有出现自己的虚拟机,但是Ruby语言虚拟机的商业需求是明显的。这也是JRuby语言实现的目标之一。

随着Ruby语言虚拟机的不断创新,可以肯定JRuby语言及其框架的应用软件将会更加丰富。在其他Ruby语言虚拟机尚未出现之前,JRuby语言将会借助于Java语言的力量和当前越来越多的多核电脑性能成为一种不可忽视的选择。

以上迹象都表明,JRuby语言正在成长为一门日趋重要的企业级的动态开发语言。

读者对象

本书就是实际开发和学习JRuby语言程序的参考指南。它不仅是为希望了解Ruby语言的最重要的思想、概念和开发方法的读者所撰写的,也是为希望利用Java语言技术和现有Java语言资料的开发JRuby软件的程序员所撰写的。

本书通过大量的概念性代码和现实世界的JRuby语言程序向读者展示了JRuby语言的强大魅力,使读者能够轻松理解和掌握JRuby语言的基本概念、实际操作方法及软件开发技巧。书中还大量使用命令行方法来开发程序,目的是让读者更好地了解这一门计算机语言的核心和软件开发的实质过程。

本书力图使读者能够操作书中的每一行命令和执行书中的每一行程序代码,以达到计算机科学的理论与实践相结合的目的。本书中每一行命令和每一个程序都由作者精心设计和挑选,它们都是在成功执行以后复制到书中的。希望读者能够通过执行本书的命令和程序操作,更加深入地了解和掌握这门语言。

本书结构

本书大体上分为两大部分:

第一部分,JRuby语言的基本概念、运行环境的安装、集成开发环境的搭建、构建系统及其运用、对JRuby语言的核心成分——对象、类、模块等进行了深入讨论,并对其关系进行了全方位的解释。

第二部分,介绍具体软件的开发过程,具体讲解如何开发JRuby语言终端软件、JRuby语言桌面软件,如何生成自己的JRuby语言软件包,如何操控Java语言丰富的资源,以及如何利用JRuby语言的专有框架Rails开发网络软件等内容。

如果读者是JRuby语言的初学者,那么,可以从本书的第一页开始,跟随本书的每一行命令和每一个程序进行学习、模仿和练习,您必将有所收获。

如果读者已经了解Java语言,但是第一次接触Ruby语言,那么,最好重点阅读第一部分的第5章和第6章内容。在那里,您可以充分了解Ruby语言面向对象的独特设计思想。

如果读者已经熟悉Ruby语言和Java语言,那么,就可以直接进入第二部分的章节。通过这些JRuby实例和框架程序,您可以充分理解JRuby语言的作用和应用领域。

王德志撰写第一部分的前两章,姜伟撰写第二部分的前两章,其余部分是由骆古道所撰写。尽管我们对文稿进行了再三校对和代码运行,但由于作者的水平有限,书中难免会留有一些错误,希望读者朋友们批评指正。此外。考虑到在本书的创作过程中,JRuby语言本身发生了深刻的变化,并且Ruby语言和JRuby语言的软件包和插件也在持续不断地更新,所以建议读者在学习和使用本书代码时,最好能够按照本书所提到的软件和软件包版本进行工作。如果您发现任何问题或错误,请及时与我们联系,邮箱是:gudao.luo@gmail.com,我们一定会尽快给您答复。

特别说明:由于本书开本限制,代码清单中采用“【不空格继续】”与“【空一格继续】”表示在实际运行中接下来的一行代码与本行应为同一行代码。“【不空格继续】”连接的前后内容之间没有空格;“【空一格继续】”表示需要在所连接的前后内容之间敲一次空格键。

本书重要软件版本说明

Ruby语言和JRuby语言是目前发展比较快的语言,为了使读者能够顺利地学习和运行书本中的实例,建议大家采用下列系统环境和软件版本:

Windows 2000/XP中文系统

Ruby 1.8.6

JRuby 1.1

此外,在本书的实例中,也涉及一些其他软件的版本问题,希望读者们能够按提示安装,否则可能会出现版本号不兼容的问题。

致谢

非常感谢我的博客读者,是他们给予我莫大的帮助和支持,才得以完成本书的创作。由于本书是第一版,正如程序的版本1.0.0那样,书虽然出版了,但仍在持续的创作过程中。我相信,通过读者朋友们的帮助,一定能让这本书更加完善。

我特别要感谢电子工业出版社的周筠、方舟、杨绣国和杨福川,他们为此书付出了大量辛苦的劳动,没有他们的努力,本书是不可能这么快与读者朋友们见面的。

同时感谢在此书正式交稿之前,为本书进行认真校对和阅读的朋友:赵一飞和易波,他们所提出的修改建议使得本书更加严谨。

十分感谢本书的另外两位作者姜伟和王德志,他们是我多年的朋友,我们志同道合,经常一起讨论有关程序设计等方面的问题。本书是我们合作的结晶。

骆古道

2008年3月27日于慕尼黑