技术开发 频道

Sun招安Jruby关键人物意欲何为?


【IT168 专稿】

    JRuby可以让人们具有“平台的信心”,令已经存在的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的静态环境中使用脚步语言有什么劣势吗?
0
相关文章