JVM上的前五种脚本语言

Groovy和JRuby是一个强大的领域,Scala、Fantom和Jython紧随其后

任何在过去十年中使用过软件开发工具的人都知道,术语“Java”指的是两种技术:Java编程语言和Java虚拟机(JVM)。Java语言被编译成在JVM上运行的字节码。通过这种设计,Java提供了它引以为豪的可移植性。

然而,语言和JVM却越来越朝相反的方向发展。这种语言变得越来越复杂,而JVM已经成为可用的最快和最有效的执行平台之一。在许多基准测试中,Java等同于由编译语言(如C和c++)生成的二进制代码的性能。语言的复杂性不断增加,JVM的卓越性能、可移植性和可伸缩性为新一代编程语言打开了大门。这些语言缺乏Java的语法过载(通常被轻蔑地称为“仪式”)——也就是说,在编写完成实际工作的代码之前,需要生成大量多余的代码——但它们利用了JVM。

Eclipse PDT、NetBeans、NuSphere PhpED和Zend Studio为Web开发人员领导了一个强大的ide领域。看到“InfoWorld评论:八个PHP电动工具通过WYSIWYG原型环境和预先配置的图形组件,快速Web开发工具可以帮助您更快地构建应用程序——但灵活性较低。看到“InfoWorld评论:快速Web开发的工具”)

在本文中,我研究了其中一些语言,对它们进行了比较和对比,并确定了它们特别能满足的需求。我只使用免费和开源的JVM语言。令人惊讶的是,封闭源代码的商业世界几乎没有类似的产品。其中一个突出的是Cold Fusion标记语言,它是Adobe的Cold Fusion Web应用程序开发环境的一部分。

技术人员对于脚本语言到底是什么存在分歧。在最狭义的定义中,它是一种使开发人员能够编写快速程序的语言。这些程序通常是解释或半编译的,而不是用传统的方式编译。在为本文选择语言时,我使用了一个更宽泛的定义,即任何比Java更容易编码的JVM语言。有些是编译的,有些是半编译的,但都适合快速开发。我关注的语言有Groovy、JRuby、Fantom、Jython和Scala。还有其他一些候选者,即Clojure、JavaFX和NetRexx,我在最后简要介绍了它们。

今天的JVM脚本语言根据其采用率自然地分为两组。Groovy和JRuby属于流行阵营,而其他的则是小众玩家——也就是说,它们目前只吸引一个小社区。然而,值得注意的是,Groovy和JRuby两年前也都是小众语言,所以没有理由相信一种小众语言会永远被边缘化。我认为出现的可能性更倾向于Scala,然后是Fantom,最后是Jython。正如我稍后解释的那样,我认为Jython在阳光下的时刻可能来了又走了。

JVM脚本语言1:Groovy——强大的、高级的、对企业友好的JVM脚本语言2:JRuby——比Ruby更好的Ruby?JVM脚本语言3:Scala——快速、多范式编程JVM脚本语言4:Fantom——Java和。net加上性能JVM脚本语言5:Jython——用于JVM的PythonClojure、JavaFX和NetRexx

JVM脚本语言1:Groovy——强大的、高级的、企业友好的Groovy是一种面向对象的语言,它被编译成字节码。它的主要语法特征是与Java非常相似,但去掉了很多混乱。Java开发人员可以快速掌握Groovy,事实上,Groovy编译器乐于接受纯Java语法,允许Java开发人员过渡到脚本语言,而无需学习全新的语法。

Groovy简化代码的许多方面之一是使用duck typing。这个术语指的是语言推断变量类型的能力,而不必由开发人员显式地告知。例如,Groovy可以检查变量的初始使用,并确定它是整数、字符串或其他。程序员可以自由提供这些信息,也可以让Groovy自行解决。

Groovy是最早提供闭包特性的脚本语言之一,Java开发人员没有成功地迫使Sun(现在可能是Oracle)提供闭包特性。闭包允许开发人员将一小段代码指定为独立的实体,并将其附加到其他编程操作中。这使得描述程序函数非常简洁,并且在其他语言中,可以提供一种方法,将函数创建为可以作为参数传递给其他函数的对象。

Groovy还提供了用于处理标准任务的高级构造,如字符串处理、使用或生成XML、单元测试等等——所有这些都可以为开发人员节省大量时间。事实上,Groovy早期的一个用例利用了它的高级语法和测试支持,快速地消除了Java代码的单元测试。

Groovy有一段独特的历史,它突出了开放源码世界的一些变迁。该项目于2003年启动。两位创始人随后转向了其他项目,并在不同时期贬低了他们最初的创作。但是,即使没有它们,贡献者社区也有足够的兴趣保持Groovy向前发展。该项目随后由法国开发商纪尧姆•拉福(Guillaume Laforge)认真接手,并在他的领导下迎来了复兴。一个领先的Web框架Grails是使用Groovy构建的,最终工具公司开始在他们的ide和其他开发人员产品中支持Groovy。

Laforge和Grails的开发者Graeme Rocher现在都在VMware的一个部门SpringSource工作。公司的支持可能表明Groovy的未来是有保证的。但是,尽管该语言的受欢迎程度正在上升,但它长期存在的一个弱点正在慢慢得到解决:运行时间慢。尽管JVM的性能得到了优化,但Groovy的一些特性确实带来了很高的成本。正在进行各种努力,以实质性地改变这些特性或减少它们对性能的影响。

JVM脚本语言2:JRuby——比Ruby更好的Ruby?JRuby是Ruby语言的Java端口。Ruby本身是上世纪90年代中期在日本开发的一种脚本语言,在那里得到了广泛的采用。在它的杀手级应用Ruby on Rails于2004年发布之前,该语雷竞技比分言在美国和欧洲一直默默无闻。通过使用一套使组装Web应用程序的各个部分变得更加容易的约定,Rails很快被用于为中小型企业开发网站。Rails的流行导致人们对Ruby的兴趣激增。

Ruby语言具有我在文中描述的许多特性Groovy,但它使用了更简洁的语法——允许开发人员在每一行代码中完成更多的工作。Ruby面临的最大问题是性能。在多个基准测试中,与所有其他语言相比,它排在最后或接近最后。这促使许多竞争项目重写Ruby。其中,最成功的是JRuby。

JRuby项目始于2001年,是Ruby代码的直接移植。到2007年,这个项目——现在由Sun公司的两位工程师查尔斯·纳特和托马斯·埃内博——可以在Rails上运行Ruby,并提供与非java Ruby相当的性能。从那以后,开发人员搬到了Engine Yard,这是一个Ruby on Rails的商业主机,在那里,JRuby的工作继续快速进行。与此同时,Ruby发布了更快的1.9版本。根据Nutter的说法,JRuby的性能现在可以与这个版本相媲美。

与Ruby一样,JRuby对开发人员的吸引力不仅仅在于它的高级语法。它还具有纯面向对象的实现(不像Java,有些实体是对象,有些不是)、闭包、duck类型和解释器。使用解释器意味着您可以立即从编码过渡到执行。JRuby所拥有而Ruby所缺乏的是Java平台的大量库。Ruby有许多很好的库,但它们既没有标准Java库那么多,也没有那么广泛地使用。

对Java运行时环境和库的访问是决定JRuby未来发展的一个关键方面。Ruby还没有大规模地进入企业。JRuby很可能是它的门票。JRuby的优势在于,企业已经习惯于在JVM上运行应用程序,而本地Ruby虚拟机是一个未知元素,数据中心的工作人员不知道它的特性。雷竞技电脑网站此外,由于与Java应用程序的集成,公司可以通过JRuby采用Ruby,并仍然利用以前在Java软件上的投资。

企业是倾向于使用Groovy还是JRuby完全取决于IT开发中心内部的需求。这两种解决方案都工作得很好,得到了付费开发人员(而不是志愿者)的支持,在工具供应商中得到了越来越多的支持,并且可能存在一段时间,能够快速交付工作代码。

小众语言以下三种语言不像GroovyJRuby不过,他们具备在未来几年内取得成功的要素。即使他们没有达到这个水平,他们也有热情的支持者,他们可能会让这种语言在不同的编程领域保持活力。

JVM脚本语言3:Scala——快速、多范式编程Scala(发音为“scah-lah”)最初是在2003年作为一种研究语言开发的。它经常被描述为一种多范式语言,因为它结合了来自不同编程哲学的元素。它的核心是一种具有功能性的纯面向对象语言(也就是说,所有东西都是对象)。功能,在这种情况下,是指一种编程风格流行在学术界倾向于使用功能没有副作用(不改变的状态变量的函数或其他功能),使用一级函数(函数成为对象,可以传递给其他函数),并在一定程度上有可能,在变量上使用常量。最后一个首选项可能听起来有些奇怪,但它在许多语言中都存在,包括Java。例如,Java中的字符串不能被修改。任何改变现有字符串的尝试都会导致创建一个全新的字符串。

函数式编程一直是一个受欢迎的研究领域,Scala可能是它进入主流的工具。与传统编程方法相比,它的最大优点是极大地便利了并行编程——使程序的多个部分同时执行的能力。随着多核成为现代处理器的标准,并行编程代表了充分利用硬件功能的一种极好的方式。为此,Scala在JVM语言中是独一无二的,因为它在语言中内置了actor(另一种并行编程构造)。(《Fantom》增加了演员。差别很小,但对某些开发人员来说很重要。)

Scala比这里讨论的其他语言有一个独特的优势:性能。该语言被编译为优化的字节码,运行速度基本上与本机Java一样快。剩下的语言在执行速度上与Scala有些或非常落后。

然而,Scala确实有缺点。第一个有时是不透明的语法。每种语言都可以用来生成难以理解的代码,但在Scala中更容易做到这一点。第二个问题是二进制兼容性。Scala的维护者已经多次发布了与以前版本不兼容的新版本。这对广泛采用来说是一个巨大的障碍,当然在企业开发人员中是如此,因为他们会发现重新编译现有的代码以使用最新的代码没有任何乐趣。尽管如此,Scala的好工具已经出现了,而且用户社区非常活跃和热情。我完全期待Scala在几年内成为JVM语言的顶层。

JVM脚本语言4:Fantom——Java和。net加上性能Fantom(以前称为Fan)在这里讨论的语言中是独一无二的,因为它可以在运行时为JVM或Microsoft的. net平台生成字节码。该语言是面向对象的,具有许多与前面描述的Groovy和JRuby相同的特性,除了与Java库的集成不是无缝的:需要一个特殊的接口来与现有的Java字节码进行交互。Fantom通过自己的扩展库部分地弥补了这个缺点。

该语言遵循其设计师Andy和Brian Frank的愿景,他们最初编写该语言是为了为他们的一个客户开发一个大型实时软件包。与Groovy和JRuby的设计者一样,他们的愿景是简化编码。他们取消了相当多的仪式,但推进了一些新的领域,做出了一些有趣的选择。

12 第1页
第1页共2页
工资调查:结果在