【IT168 评论】Groovy和JRuby二将领衔JVM脚本语言,Scala、Fantom和Jython三位亦是JVM脚本中的好汉。
很多人都知道,在过去很长一段时间里,Java技术是指Java编程语言和Java虚拟机(JVM)。把Java语言被编译成字节码在JVM上运行,而通过这样的技术,Java也被认为是可以在任何环境、操作系统中都可以运行功能较多语言。
但是,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脚本语言。Groovy是一种面向对象的语言,编译为字节码。其主要特点是它的语法与Java极为相似,但与很多杂乱的设置都删除了。 Java开发人员可以很使用Groovy,而事实上,Groovy的编译器接受纯Java的语法,Java开发人员学习一个全新的语法的脚本语言。
对Groovy的,简化了代码的诸多方面。尤其语言能力的推断,而不必一个变量的类型明确表示。例如,Groovy可以检查一个变量的初始使用,并确定它是一个整数,字符串等。程序员可以自由地提供这方面的代码只是在Groovy中工作。
Groovy中是最早的脚本语言之一,以提供另一种功能,称为封锁,迫使Sun公司Java开发(现在的甲骨文公司)提供。封锁使开发者指定的代码作为一个独立的实体,并把它钉住到其他编程业务的一小部分。这使得在描述程序的功能非常简洁,并在其他语言,可以提供一种手段,为创建可作为函数的参数传递给其他对象的功能。
Groovy中还提供高层次的结构处理,如字符串处理标准任务,生成XML,单元测试等等 - 所有这些都可以节省大量的时间开发。事实上,对Groovy的早期就注意到其高级别语法和测试支持的优势,迅速淘汰用于Java代码单元测试。
Groovy中具有独特的历史,开源世界的奇葩。该项目启动于2003年。创始人后来移居到其他项目,在不同时期,都认为Groovy不能成功。不过即使没有他们,开源社区贡献者也对Groovy产生浓厚的兴趣,保持了Groovy前进。一个领先的Web框架,使用Groovy和在他们的支持IDE最终走到世人面前。
Laforge和Grails的开发者以及现在SpringSource和VMware这些企业的支持Groovy的未来是有保证的。尽管JVM的性能优化,但是一些Groovy特性却有很高的成本。同时虽然Groovy语言的受欢迎程度正在上升,它患有长期的弱点,正在慢慢出现:缓慢的运行速度。
中将军——JRuby - 比红宝石更好的吗?JRuby是一个Ruby语言的Java的端口。Ruby本身是一种脚本语言在1990年代中期的日本出现,它已经得到了广泛应用。在2004年的美国和欧洲Ruby的杀手锏级别武器——Ruby on Rails出现,使得Web应用程序装配的各部分更容易设置,Ruby被迅速投入使用开发小型和中型的企业网站。 Rails的普及导致了Ruby的爆炸性增长。
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不同,其中有些实体对象都没有)。一名开发人员的使用意味着你可以将立即从编码到执行。JRuby已经是Java平台的巨大库。 Ruby有很多好的代码库,也是众多广为使用标准的Java库。
对Java的运行环境和代码库来说,访问是决定JRuby的未来是至关重要的一环。Ruby一直没有进入在一个大企业,JRuby则可能是存进入大企业。 JRuby中的优点,企业可以在JVM上的应用程序运行,而原生的Ruby虚拟机是一种不成熟的数据中心。此外,由于与Java应用程序集成,企业可以通过采用JRuby和Java软件中还利用到以前开发的Ruby项目中去。
企业是否会赞成的Groovy或JRuby完全取决于科技发展速度。这两种解决方案工作,是由发展商支持的(而不是由志愿人员),有日益扩大的工具供应商长时间的支持,迅速提供工作代码。而以下三种语言现在并不像Groovy和JRuby成功,但他们有一些必定能使他们在未来数年内的取得成功。即使他们没有达到这个水平,他们也都有众多的热情支持者。
后将军——Scala - 快,多范例programmingJVM脚本语言。最初是在2003年发展成为一个研究语言。它经常被描述为一个多范例语言,因为它结合了不同的编程元素。其核心是一个纯粹的面向对象的语言(即,一切都是一个对象)的功能能力。Scala是一个在学术界流行的编程风格有利于职能,没有副作用(函数不改变函数的变量或其他国家使用),一流的功能(函数成为使用对象可以传递给其他函数),并尽可能多的使用常量的变量。在Java字符串不能被修改,但是Scala的任改变一在一个完全新的字符串创建现有字符串的结果是可以实现的。
函数编程的研究一直是一部分开发者最喜欢的领域,而Scala可能是函数编程的主流。它对传统的编程方法最大的好处是,它极大地方便并行编程——能够有一个程序的多个部分同时执行。随着多核心处理器成为了现代的标准,代表了并行编程的开发硬件的全部功能的好办法。为此,Scala在JVM中有独特的语言——另一个并行编程结构——内置到语言。
开发者在Scala这里享受过其他语言没有的快乐:奇异的性能优势。语言是编译为优化代码,运行速度基本上和Java没有区别。其余的语言远远地落后于Scala远远执行速度。
当然,Scala确实有缺点。其中第一项是有时不透明的语法,每一种语言都有用于生成坚不可摧的代码,但它更容易在Scala这样做。第二个问题是一个二进制兼容性,Scala的维护人员已经发布二进制兼容新版本。如果广泛采用,尤其是在企业开发里,把现有代码重新编译,以便能够与现在的代码兼容,这是Scala发展的一个巨大障碍。不过,对于Scala的好工具相继出现,以及社区的用户是积极和热情。我完全相信Scala会成为JVM语言里最棒的一个。
左将军——Fantom - Java和.Net的performanceJVM的脚本语言。它无论是在JVM或为微软的运行代码时都是少有的。与前面介绍的许多面向对Groovy和JRuby只是与Java库整合,Fantom语言也有对象相同的功能,而且是无缝的:一个特殊的界面交互,需要与现有的Java字节码替换,Fantom弥补了部分没有其自身丰富的代码库这一缺憾。
Fantom这种语言遵循其设计者的想法,最初制定他们的客户需要的实时软件包。Fantom这种语言设计者就像是Groovy的和JRuby的设计师一样,想使编码更容易。他们已经取消了相当数量的代码,但前面推入新的领域作出一些有趣的选择。
例如,所有的整数和浮点值是64位。这意味着,对于所有意图,对算术运算的结果不能造成溢出的领域限制。 Fantom还包括内置的并发——Scala只有对全面的并发这个共同特征的支持。该代码库已经很成熟了,很多语言认为按照Java和.net的标准API的模式是不守秩序。因此,Fantom的API是需要一个特定的功能,只有在Fantom那里才可以找到。作出Fantom网站出色的文件显然更加更容易。
像许多语言一样,Fantom对通过外部工具只有有限的支持。它唯一的IDE支持是NetBeans。这有可能改变为Fantom社区的增长和其独特的设计和跨平台特性变得更加广为人知。总体来说Fantom有点像马超一样,有点独!
右将军——Jython - Python中的JVM的脚本语言。JPython,是JVM释放最早的脚本语言之一。其目的是Python用于Java平台的实现。在这方面,只是部分成功,因为它没有实现所有Python,而是整个Python语言的一小部分。 Python本身是沿着原来的脚本语言与Perl(1)。它保留了它的普及多年来作为一个最好的通用语言,它被广泛应用于内的Google。
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
原文名:Top five scripting languages on the JVM