JVM话三国 脚本语言之五虎上将
【51CTO独家特稿】蜀汉昭烈帝刘备麾下的五员猛将。建安十六年(219年)刘备攻取汉中,自立汉中王,册封麾下关羽、张飞、赵云、马超、黄忠为五虎上将。
在JVM中也有五个炙手可热的脚本语言,堪称JVM的五虎上将!
Groovy和JRuby二将领衔JVM,Scala、Fantom和Jython三位亦是JVM脚本中的好汉。
五虎上将:关羽、张飞、赵云、马超、黄忠
五种语言特性对比
但是,Java和JVM的发展轨迹却不相同:Java与C、C++等语言一样,越来越复杂,而卓越的性能以及拥有便携性和可扩展性的JVM却逐渐成为最快和最有效的执行平台,JVM现在已经创造了一个新一代的开放编程语言平台。
在写本文之前,我们找到一些可以在JVM上运行的脚本语言,让他们做一些对比,我认为这些开源的语言要比闭源的语言好得多。开发人员在编写程序时都会使用脚本语言。这种语言的狭义概念是使开发人员快速编写程序的语言。这些语言编写出来后一般被认为是可执行或半编译的程序,而不是传统意义编程。我们用另一个广义概念来解释就是这些都是可以在JVM上运行的语言,比Java更加轻便的语言。有些是可以执行的,有些是半编译的,但是都发展迅速。我把定义成JVM上的五虎上将:Groovy、JRuby、Fantom、Jython和Scala。
今天JVM的脚本语言我们可以分为两个重量级。 Groovy和JRuby自然是第一阵营。
值得注意的是,Groovy和JRuby的位置也并不牢靠,就在两年前他们的位置还很边缘化。我认为,在未来他们的位置随时会被Scala、Fantom和Jython取代。如果你听我讲完之后,你会觉得Jython的阳光时刻可能已经来了。
JVM的脚本语言五虎上将:
关羽——Groovy - 强大的,高层次,企业级JVM脚本语言。
赵云——JRuby -还有比红宝石更好的吗?
张飞——Scala - 快,多范例programmingJVM脚本语言。
马超——Fantom - Java和.Net的performanceJVM的脚本语言。
黄忠——Jython中 - Python中的JVM的脚本语言。
关羽——Groovy - 强大的、高层次、企业级JVM脚本语言。关羽,[字:云长][终属:蜀汉](生卒:?-219)[并州]河东解县 [今山西运城]人,官至前将军,封汉寿亭侯,追谥曰壮缪候。Groovy是一种面向对象的语言。其主要特点是它的语法与Java极为相似,但与很多杂乱的设置都被删除了。Groovy中是最早的脚本语言之一,具有独特的历史,是开源世界的奇葩,如果说Java就是蜀国汉昭烈帝刘备的话,那只有忠勇的Groovy可称关羽。Java开发人员可以很快使用Groovy,事实上Groovy的编译器接受纯Java的语法,Java开发人员可以很快地学习这个全新的脚本语言——Groovy。
前将军关羽
对于Groovy,开发者运用时简化了很多代码。尤其语言能力的推断方面。例如,Groovy可以检查一个变量的初始使用,并确定它是一个整数,字符串等。程序员可以自由地提供这方面的代码。
Groovy中是最早的脚本语言之一,它同时还提供另一种功能,称为封锁,由Sun公司Java开发(现在的甲骨文公司)提供。封锁使开发者指定的代码作为一个独立的实体,并把它运用到其他编程业务中。这使得在描述程序的功能非常简洁,并在其他语言里,可以提供为创建可作为函数的参数传递给其他对象的功能。
Groovy。构建在强大的Java语言之上并添加了从Python,Ruby和Smalltalk等语言中学到的诸多特征,为Java开发者提供了现代最流行的编程语言特性,而且学习成本很低(几乎为零),在开发Web,GUI,数据库或控制台程序时, 通过减少框架性代码大大提高了开发者的效率。支持单元测试和模拟(对象),可以简化测试。无缝集成所有已经存在的Java对象和类库。直接编译成Java字节码,这样可以在任何使用Java的地方使用Groovy。
Groovy中具有独特的历史,开源世界的奇葩。该项目启动于2003年。创始人后来移居到其他项目,在不同时期,都认为Groovy不能成功。不过即使没有他们,开源社区贡献者也对Groovy产生浓厚的兴趣,保持了Groovy前进。一个领先的Web框架,使用Groovy和在他们的支持IDE最终走到世人面前。
有Laforge和Grails的开发者以及现在SpringSource和VMware这些企业的支持使Groovy的未来变得有保证。尽管JVM的性能优化,但是一些Groovy特性却有很高的成本。同时虽然Groovy语言的受欢迎程度正在上升,它患有长期的弱点,正在慢慢出现:缓慢的运行速度。她也给了其他脚本语言了机会,五虎上将中的关羽是第一个阵亡的,Groovy又会不会被其他语言超越呢?
赵云——JRuby - 比红宝石更好的吗?JRuby是一个Ruby语言的Java的端口。赵云,[字:子龙][终属:蜀汉](生卒:168-229(62岁))[冀州]常山真定 [今河北正定]人,官至镇东将军,封永昌亭侯,追谥曰顺平侯。Ruby本身是一种脚本语言在1990年代中期的日本出现,它已经得到了广泛应用。在JVM中JRuby2004年才在美国和欧洲Ruby的杀手锏级别武器——Ruby on Rails。Ruby on Rails使得Web应用程序装配的各部分更容易设置,Ruby被迅速投入使用开发小型和中型的企业网站。 Rails的普及导致了Ruby的爆炸性增长。常言道:“马中赤兔,人中吕布。”武功不在吕布之下的赵云当有宝石的称号,五虎上将中也只有常胜将军常山赵子龙堪比JRuby!
中将军赵云
Ruby语言有很多在Groovy中的功能,但它使用了更简洁的语法——让开发人员得到更多的工作。Ruby面临最大的问题是性能。在多个基准里,它都是排在最后的。这促使许多竞争性项目,以重写Ruby。其中,最成功的是JRuby的。
JRuby项目开始于2001年1月,Ruby的代码直接端口到JVM。2007年,Sun工程师对JRuby进行开发——可以运行Rails的Ruby和交付性能媲美非Java的Ruby。自那时以来,开发人员转移到Ruby on Rails上,在JRuby的工作已持续快速上涨并迅速抓到了商机。在此期间,JRuby的性能是现在这个版本比Ruby发布的1.9版本要快得多。
JRuby。一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。
对Java的运行环境和代码库来说,访问是决定JRuby的未来是至关重要的一环。Ruby一直没有进入在一个大企业,JRuby则可能是存进入大企业。 JRuby中的优点,企业可以在JVM上的应用程序运行,而原生的Ruby虚拟机是一种不成熟的数据中心。此外,由于与Java应用程序集成,企业可以通过采用JRuby和Java软件中还利用到以前开发的Ruby项目中去。最重要的是高司令离开Oracle之后全心投入到JRuby开发中去,这个给了JRuby开发者极大的信心!就像被横扫N次团队突然来了个MT!
高司令blog:“On a New Rord” 主页上截取的图片“高司令和JRuby红鼻子小企鹅在一起”
企业是否会支持Groovy或JRuby完全取决于科技发展速度。Groovy和JRuby目前都是由发展商支持的(而不是由志愿人员),有日益扩大的工具供应商长时间的支持,迅速提供工作代码。而以下三种语言现在并不像Groovy和JRuby成功,但他们有一些必定能使他们在未来数年内的取得成功。即使他们没有达到这个水平,他们也都有众多的热情支持者。
张飞——Scala - 快,多范例programmingJVM脚本语言。张飞,[字:翼德][终属:蜀汉](生卒:?-221)[冀州]涿郡涿县 [今河北涿州]人,官至车骑将军,追谥曰桓候。最初是在2003年发展成为一个研究语言。它经常被描述为一个多范例语言,因为它结合了不同的编程元素。其核心是一个纯粹的面向对象的语言(即,一切都是一个对象)的功能能力。Scala是一个在学术界流行的编程风格有利于职能,没有副作用(函数不改变函数的变量或其他国家使用),一流的功能(函数成为使用对象可以传递给其他函数),并尽可能多的使用常量的变量。在Java字符串不能被修改,但是Scala的任改变一在一个完全新的字符串创建现有字符串的结果是可以实现的。论忠诚张飞不比关云长差得半分,论武艺能喝断桥的张翼德可给赵云断后,强大的Scala不就和张飞一样吗?
后将军张飞
Scala。一种多范式的编程语言,设计意图是要整合面向对象编程和函数式编程的各种特性。Scala编程语言近来抓住了很多开发者的眼球。它看起来像是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Scala的名称表明,它还是一种高度可伸缩的语言。Scala的设计始终贯穿着一个理念:创造一种更好地支持组件的语言。
开发者在Scala这里享受过其他语言没有的快乐:奇异的性能优势。语言是编译为优化代码,运行速度基本上和Java没有区别。其余的语言远远地落后于Scala远远执行速度。
当然,Scala确实有缺点。其中第一项是有时不透明的语法,每一种语言都有用于生成坚不可摧的代码,但它不太容易在Scala上这样做。第二个问题是一个二进制兼容性,Scala的维护人员已经发布二进制兼容新版本。如果广泛采用,尤其是在企业开发里,把现有代码重新编译,以便能够与现在的代码兼容,这是Scala发展的一个巨大障碍。不过,对于Scala的好工具相继出现,以及社区的用户是积极和热情。我完全相信Scala会成为JVM语言里最棒的一个。
马超——Fantom - Java和.Net的performanceJVM的脚本语言。马超,[字:孟起][终属:蜀汉](生卒:176-222(47岁))[雍州]扶风茂陵 [今陕西兴平]人,官至骠骑将军,封酉绾睿汾衷煌睢 Fantom 前身是 (Fan) 是一个基于 Java 和 .NET 平台的编程脚本引擎,用来在运行时产生 JVM 和 .NET 平台的字节码,该语言是面向对象的,跟 Groovy 和 JRuby 有点类似,可通过特定的接口来集成 Java 的类库。马超天生的守城大将,攻城略地被C#——曹操打得大败,Fantom在JVM阵营中的停滞不前不正像马超的后半生吗?
左将军马超
Fantom这种语言遵循其设计者的想法,最初制定他们的客户需要的实时软件包。Fantom这种语言设计者就像是Groovy的和JRuby的设计师一样,想使编码更容易。他们已经取消了相当数量的代码,但前面推入新的领域作出一些有趣的选择。
例如,所有的整数和浮点值是64位。这意味着,对于所有意图,对算术运算的结果不能造成溢出的领域限制。 Fantom还包括内置的并发——Scala只有对全面的并发这个共同特征的支持。该代码库已经很成熟了,很多语言认为按照Java和.net的标准API的模式是不守秩序。因此,Fantom的API是需要一个特定的功能,只有在Fantom那里才可以找到。作出Fantom网站出色的文件显然更加更容易。
像许多语言一样,Fantom对通过外部工具只有有限的支持。它唯一的IDE支持是NetBeans。这有可能改变为Fantom社区的增长和其独特的设计和跨平台特性变得更加广为人知。总体来说Fantom有点像马超一样,有点独!
黄忠——Jython - Python中的JVM的脚本语言。黄忠[字:汉升][终属:蜀汉](生卒:148-220(73岁))[荆州]南阳 [今河南南阳]人,官至后将军,追谥曰刚侯。 JPython,是JVM释放最早的脚本语言之一。其目的是Python用于Java平台的实现。在这方面,只是部分成功,因为它没有实现所有Python,而是整个Python语言的一小部分。 Python本身是沿着原来的脚本语言与Perl(1)。它保留了它的普及多年来作为一个最好的通用语言,它被广泛应用于内的Google。黄忠为五虎上将最后一名,和Jython一样,年轻时无比强悍,可惜耽误了几年,可惜可惜啊!
右将军黄忠
Jython由于继承了Java和Python二者的特性而显得很独特。其是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。
Jython的最初受到了它的主要开发者热情用户,但他主要的创始人离开了项目,去往微软工作之后,Jython开始挣扎着前行。在经历了Jython的创始人离去之后,项目基本在2005至2008年间停滞。在此期间,其他JVM的脚本语言尤其是Groovy,获得了很大的发展,而Jython是否会像黄忠一样慢慢老去、永远无法恢复的原有势头,我们拭目以待!
总结:
本文原为外文文章“Top five scripting languages on the JVM”。翻译成汉语为“基于JVM的5大脚本语言”。编辑们稍作加工,希望大家喜欢。
原文出处:http://www.networkworld.com/reviews/2010/071410-top-five-scripting-languages-on.html?hpg1=bn