1.2 为什么要学习JRuby语言

人们为什么对JRuby情有独钟?JRuby从本质上讲就是用Java语言对Ruby语言解释器所进行的再造,其目的是使JRuby兼具Java和Ruby二者的优秀特性,具有丰富的资源和简洁明快的编程风格,更重要的是Ruby还紧密绑定了Ruby on Rails等Web应用开发框架。事实上,这正是软件开发人员关注JRuby的基本出发点。

1.2.1 什么是Rails

什么是Rails?简单地说,Rails就是指一个用Ruby实现的互联网应用的框架,是一个典型的敏捷开发框架。

Rails是基于模型视图控制模式(MVC)的网络开发框架。Rails框架包含了这三个层次的每一部分,而且每一个层次都是该框架的组成部分。这就使得各层可以很好地融合在一起,而不需要我们考虑如何进行配置的问题。其中,模型(Model)主要负责业务逻辑操作和数据的存储;视图(View)主要负责把数据填加到HTML标记中;控制(Control)主要负责Web请求处理。

Rails框架主要有如下三大特点:

1.约定简化了软件开发

当前的许多Java语言的网络软件框架配置相当复杂。像Seam和Spring这些比较新的Java网络框架,尽管其使用了极少的配置和代码就可以发布业务对象,但是,当项目比较大的时候,其配置文件还是比较大的。这样不利于系统的维护和管理。在Rails框架应用软件中,配置文件不仅简单和容易,而且框架还为软件开发人员进行了细致地分类。

软件工程领域中有两条古老原则:避免冗余和有意义的默认值。在Rails框架中把这两个原则体现为:“不要重复自己”和“约定优于配置”。Rails可以根据约定得出不同层次的连接关系,甚至可以显式、动态地添加属性,从而反射数据库字段(如“last_name”)会自动使模型类的属性(如“last_name”)出现。必须指出的是:这种默认配置(约定)并不是一成不变的,而是可以随时进行改变的。其实Java语言框架也是有一些约定的,只是不够彻底和灵活。

2.自动代码生成器技术

Rails框架大量使用了Ruby的反射和元编程技术。正是元编程技术使开发人员能够很容易获取该框架的开发代码,简化了扩展软件的开发过程,节省了软件开发人员大量的时间。同时,也使得该框架的第三方代码生成器迅猛发展,如Hobo框架和Goldberg框架。

3.快速的软件开发过程

在企业中,任何Java语言应用系统进行修改以后,都需要经过配置、编译、发布、重新设置、测试等一系列步骤才能投入使用。Rails框架软件基本上也是如此。Rails开发Web应用能够在很多方面做得更快、更方便,在不需要任何改动的情况下,就可以得到来自于开发、产品和测试数据库的数据信息,从而节约了大量的开发、测试和配置时间。这种技术可以大大减少框架和应用软件的代码。Rails框架不仅自己包含了软件测试的功能,如单元测试和集成测试,还容易集成第三方测试框架,如框架RSpec或者自动化验收测试工具Selenium等。在网络服务方面,Rails框架第一个提出使用REST架构服务,这样可以大大方便Rails框架软件与其他框架软件的交互。我们将在第12章中详细阐述这种全新的网络服务技术。

Rails的成功促使软件开发人员思考这样的问题:Rails的发展代表了诸多语言的网络框架的发展趋势,它减少不必要的代码,采用更多的抽象和动态机制,并且具备更全面的即开即用功能,那么网络软件框架如何发展?很多人其实已经有了这样的共识,就是:敏捷开发在很多场合都非常适合,应该将Rails的思想引入其中。所以,Rails影响了当前网络软件框架的发展方向。到底应该如何做呢?计算机软件专家Bruce Tate在文章http://www.51cto.com/art/200610/33167_1.html中就明确说:“不推荐用Java语言构建一个更好的Rails。相反,Java开发人员应该从Rails框架中学习一些教训,并试图构建或增强Java框架”。毕竟每一门语言都有自己的特性,模仿只能改进而不能够创立一种全新的框架。

1.2.2 在JVM上运行Rails

JRuby是面向Ruby语言、基于Java虚拟机(JVM)的一种解释程序,结合了Ruby语言的简易性和JVM功能强大的执行机制,包括与Java库的全面集成。Rails加快并简化了Web应用的开发,尽管目前有人觉得它还不够成熟,缺乏大型项目的成功案例,特别是在企业级应用方面,但是这种状况正在逐步得到改善。

Java语言平台及其虚拟机、库和应用服务器的速度、稳定性和功能方面都一直在提升。Java是现在公认的开发高端应用的领先平台。如果Java平台不与Ruby这种新兴语言联系在一起,就有可能落后于流行趋势。JRuby正是在这种大背景下产生的。这也是太阳(Sun)公司投入大量的人力物力支持JRuby语言项目的开发和NetBeans开发JRuby语言程序功能的重要原因。从更深一个层次分析,太阳公司正在使Java语言虚拟机平台成为一个通用虚拟机平台。

如果你现在正在使用Spring和Hibernate等Java框架,那你用不着改变。你可以借助于JRuby语言利用现有的Java语言项目资源,并通过选择Rails框架开发你的下一个项目。遗憾的是,一般人都认为改用一种全新语言开发项目是危险的举措,管理人员对风险有顾虑。Rails更容易被管理人员所接受。对于Java虚拟机而言,Rails框架应用软件就变成了一个Java框架的应用软件。

就像用C/C++编写的操作系统能够为应用程序(可能是使用抽象程序设计语言编写的)提供基础架构一样,Java平台也为Ruby等动态语言扮演“系统软件”的角色,提供基础架构层面的支持。如今可以通过Java访问众多的功能,例如,JDBC和Java消息服务(JMS)等API是同类中最佳的,而许多不可替代的内部系统或独立软件开发商的企业信息系统也可以通过Java API来访问。Rails应用程序通过使用JRuby代码,就可以像调用Java代码那样调用现有的Java库。

有了JRuby,Rails应用程序可以与Java Web应用程序在现有的Java EE应用服务器上一起运行,这种应用服务器拥有强大的技术基础架构。在人员和培训方面,通常不缺乏教育计划以及有经验的开发和支持人员。另外只要运行在JVM上,这种应用服务器就能够获得最近十年在JVM方面投入的许多优化项目所带来的好处。

至于软件的安全问题,Java语言虚拟机的安全机制与Ruby语言运行环境相比更为安全,这样在Java虚拟机上运行JRuby on Rails软件也就变得更为安全和可靠了。

从软件的运行层面上看,Ruby on Rails软件是基于操作系统层面的,而JRuby on Rails软件是基于Java虚拟机层面的,这是Rails框架的一个巨大飞跃,使Rails软件进入到更高抽象运行层面,更好地实现跨平台机制。

1.2.3 程序语言排行榜

我们来探究一下TIOBE Programming Community(www.tiobe.com)对目前流行的计算机程序设计语言的一个评估排行榜。请看排行榜图1-2(这只是整个排名的一部分截图):

图1-2 排行榜截图

该排名最新更新日期是2007年11月份,对比排名则是2006年11月份。从排行榜可以清楚看到:Ruby是排名大幅提前的语言之一,从2006年的第12位前移到第9位。根据官方的解释:这里的“Ruby语言”实际上包含了Ruby、JRuby、XRuby、MetaRuby、Rubinius和YARV等不同的Ruby实现。

那么TIOBE Programming Community是如何来评估并确定这个排名的呢?按照官方的说法:是按照流行度(popularity)来排序,并且每个月更新一次。而流行度则是以全球范围内熟练工程师、培训课程,以及第三方销售商的数量(availability)为基准的,以流行搜索引擎Google、Google Blogs、MSN、Yahoo和YouTube(选择这些网站的理由来自Alexa.com——它能给出哪些搜索引擎是最常使用的)对该语言的点击数为依据进行计算得出的。由此,TIOBE的排名榜不是对一门语言的好坏的排名,也不是以世界上有多少该语言的代码量来排名的。但是TIOBE的排名可以为你回答这样的问题:某个编程语言的热门程度?你的编程技巧是否与时俱进了?你是否该考虑采用其他的编程语言?或者你正使用的语言是否可能最终消失?

看到JRuby和Ruby语言在这个排行榜上的位置和上升的速度,你认为我们是否需要认真对待JRuby和Ruby语言呢?有人对着这个排行榜这样说:Ruby语言疯狂了,你知道狂奔15个位置是什么概念吗?Ruby语言已经开始悄悄地改变着这个世界。再看看Java语言(如图1-3所示)和Ruby语言(如图1-4所示)历年来的变化情况,你会不会震惊?

图1-3 Java趋势变化图(数据来源http://www.tiobe.com/)

图1-4 Ruby趋势变化图(数据来源http://www.tiobe.com/)