两个JRuby项目的核心人物加盟Sun,意味着Sun将真刀实枪的在他的Java虚拟机(JVM)上实施Ruby。Enebo表示他们两个在Sun的全职工作将可以使他们集中精力去实现JRuby项目的伟大目标:
JRuby的目标就是在Java虚拟机(JVM)上实施最好的Ruby。一方面是使这个运行平台更加完美,一方面是在Java和Ruby世界之间搭建一个桥梁,让开发者更容易使用。
Sun对我们的雇佣将给我们更多的时间来研究JRuby,而且这将提高我们工作的质量,因为我们不必再为其他的事情而分心。
Nutter指出JRuby将完全与基于C语言的Ruby的实施相兼容:“我们的目的是为C Ruby提供一个相近的替代者,我们会尽可能的让JRuby与C Ruby兼容,与C Ruby的兼容性是我们工作的重中之重;假若我们不能欲行Ruby可以运行的,那还有什么希望呢?”
同时,JRuby会可以支持在C Ruby解释器上不支持的Ruby代码。Charles Nutter如此表示:有很多情况下,有的项目需要Java平台和类库的支持,因为你知道现在实际上Java的类库非常丰富。另外有的的项目可能需要超出C Ruby支持能力的线程需求,或者只有JDBC能解决的数据库连接问题。
Nutter表示保持JRuby与C Ruby的兼容,使项目可以轻松的在基于C语言平台和基于Java虚拟机(JVM)的Ruby解释器之间来回移植。
支持一个可以运行在Java虚拟机上的高质量的Ruby实施的计划,显示了Java虚拟机(JVM)正在逐渐发展成一个通用的执行环境,而不像微软的CLR环境那样。
来自Sun的Tim Bray表示,回首十年,在Java诞生的时候,我们把平台和语言分离开来宣传的确是非常聪明的。但是在Java发展的前几年,Java技术达到了如此幸福的阶段,你能很容易明白所有的一切(虚拟机、类库和语言)就是一个成功的工程。微软对此非常聪明的散布舆论:虚拟机和API指令系统没有必要与语言捆绑。在工程方面,我们一度对支持多语言是非常认真的,例如,对开源组织Mozilla的Rhino脚步语言的支持,以及被提议的动态分离方法字节码的支持。
Bray还表示Java虚拟机(JVM)可以变成最强大的Ruby执行环境之一:目前,纯正的Ruby大多数工作在解释模式。假若我们把JRuby编译成 Java的字节码的话,他将可以运行在世界上最好的优化性能的平台Java虚拟机上。因此JRuby可以拥有性能上优势。
更特别的是,Sun正在负责领导在其T1000和T2000 服务器中的“酷线程(Coolthreads)”芯片中研究高并行多核计算技术,这种芯片非常适合服务器端的Web应用程序。纯正的Ruby的线程实现功能是非常有限的,不能充分利用好这种CPU。JRuby采用了更先进的Java的线程技术,因此在执行特殊的高度线程并行代码情况下,JRuby将会又更好的机会在现在的芯片上获得成功。
除了性能上优势外,对于那些希望在在线Java商店中使用Ruby编码的开发者来说,Java虚拟机可以提供一个更安全的环境,正如Nutter所指出的:
JRubyby可以让人们具有“平台的信心”,令已经存在的Java商店接受Ruby作为一个可以处理关键业务的应用语言。我们都知道人们喜欢任何“说 Java语言”的事情,最多他们认为JRuby只是另一种形式的Java而已。当然我们还是不得不从很多地方来挑选语言和类库,无论如何现在有一个更容易的办法来把Ruby介绍到一个基于Java的组织中来。这会令很多Ruby的爱好者感到兴奋,因为这意味着更多的工作、更多的方向和更多的机会来发展这个语言和平台。
除了运行环境和安全性的的优势外,由于Ruby代码可以使用Java丰富的类库,所以Ruby开发者得到的最大的好处应该是强大的JRuby执行性能。 Enebo表示,Java具有丰富的类库资源,你所能想到的大多数类库已经在Java中实现了,通常作为一个开放源代码的程序包。JRuby让Ruby可以访问任何Java类库并与他们交互,就如同这些类库是用Ruby编写的一样。这意味着Ruby程序员拥有一个非常大的工具箱可以使用。
Nutter还评论说,JRuby就是为Java的编写类库代码的优势和Ruby的高产性之间架起桥梁的天生选择。
对于想支持已经存在了十年也测试了十年的Java平台和类库的人来说,JRuby就是合适的工具,而且你不用为了要用Java编写任何事情而感到烦恼。当然Java语言是伟大的,但是C语言同样是伟大的,他们都是一门编写灾难复原和系统关键类库和算法的语言。用Java来编写更灵活动态和细腻的应用程序代码不是一件令人愉快的建议。这就是Ruby要即决的问题。
我更愿意认为JRuby是为Java诞生的,而Ruby是为C诞生的。玩UNIX的朋友都知道,“重要的力气活”最好使用类似C语言这样的快速、静态的编译语言来完成,而大多数其他现实的工作要用脚步语言来实现,例如Perl、Python和Ruby等。由于某些原因,为了实现同样的效果,使用Java的朋友要花费更多的时间来完成。
来自Sun的Bray表示,对于Java开发者来说,JRuby带来的最大好处就是可以像Ruby一样提高生产力:最明显的短期见效就是给那些想用 Ruby编写他们部分应用的Java开发者带来了方便。对一些特定问题来说,动态语言可以给你提供更好的解决方法,现在使用JRuby就可以了。这些开发者一方么可以继续使用他们已经存在的Java类、程序和接口,一方面可以享受Ruby所带来的优势。
此外,Enebo指出JRuby也可以作为一个JSR 223脚步语言来使用。一个Java项目也能通过JSR223或BSF来嵌入使用JRuby。这允许一个Java程序托管它的部分代码通过能更满足特定需要的语言来实现。我最近碰到的一个例子是与JMX MBeans的交互。
Ruby和Java就像是天生的一对,专职在Sun工作将使得Enebo和Nutter解决Ruby与Java虚拟机(JVM)的结合中出现的难题。 Nutter指出,Java一直被设计成一个多语言的平台,但是它对像Ruby这样的动态语言的支持还没有达到我们的需要。这意味着我们目前的Ruby要运行在一个弥补差距的“虚拟机上面的虚拟机”平台上。我们无法对Java stack控制,那么我们要保持对我们自己控制。我们没有在Java虚拟机(JVM)上的动态字节码,那么我们使用自己的方法。我们不具备对闭包(closures)的支持,那么我们通过移动的范围和命令执行来模拟他们。不过我们最近的努力工作已经把目标指向了解决这些问题;由于Java虚拟机也开始发展的对他们支持,我们将能够对其逐一击破。
Enebo补充道,我们不得不检测一系列不能与Java虚拟机底层设计很好兼容的语言规则。这些语言规则需要进行改造以能更正确的执行我们的意图。我们已经几乎能与C的执行保持平衡了,但是其中一些最后的问题依然是一个挑战。尽管我们明白其中内部的原理,但是要想彻底实现这些改变也是非常困难的,因为需要改变的部分数量比较多。
尽管如此,Enebo、Nutter和Bray都认为,与先前的种种Java与动态脚步语言的结合尝试(例如Tcl/Java的结合)相比,Ruby是一个更合适的选择。Enebo如此表示:Ruby与Java有重大区别,但是这些区别通常是在运行时的灵活性上不同。在Ruby中,你可以立即创建类和定义方法。这种灵活性与Java的严谨的静态类型的环境相比有较大优势,可以让你实现在Java中没法实现的对Java对象和类的一些操作。这给予开发者一个自由而强大的感觉。这也是关于Java和Ruby结合令我喜欢的原因之一。Java提供一个严谨完美的环境,而Ruby则因其动态属性和动态类型而提供一个限制更小的环境。
Nuter补充说,Java和Ruby之间的距离是非常容易沟通的。Ruby是一个纯正的面向对象语言,而Java则是最纯正的面向对象语言。像Java 一样,Ruby也有类、方法、对象等。Ruby也有基本的流程控制和异常处理机制。Ruby使线程伪装更容易,Java也可以。当你忽略Ruby的可变类型系统和简化的语法时,语言之间的跨越就显得不那么遥远了。
你怎么看待Java与诸如JRuby类的脚步语言的结合?会以何种程度提高你的生产力?以及在Java的静态环境中使用脚步语言有什么劣势吗?