Groovy 1.6-beta-1发布,性能有大幅提高!

感谢G2One和Groovy开发团队为我们发布了Groovy 1.6的第一个beta版本

除了73 个bug fixes和24个improvements之外,剩下的全部是关于性能的提升了

运行和编译性能的提高

正如你在Groovy 1.5.5所体验到的,其编译速度较以前版本有了3 到5 倍的提高,编译速度的提升对于开发版本(1.6)和稳定版本(1.5.x分支)都是有效的,这要得益于类查找缓存(class lookup caches)技术,因此你的工程越大,这种编译速度就表现的越明显。

对于此次发布,最值得关注的变化还是Groovy运行时性能速度的提升,我们使用了Great Language Shootout的几个benchmarks来进行测试,相比于Groovy1.5.6的稳定版来说,性能有 150%到460%的提高。尽管Micro-benchmarks测试不会反映出你工程中用到的各种代码,但是总的来说你工程的性能将有显著的提升。

除了交付稳定和高质量的发布之外,在过去的10个月中,我们的重心一直都在性能上面。在Groovy1.0和1.5.1之间,同样的测试内容,我们可以获得 80%的性能提升,即使是1.5.1和1.5.6这样的小版本之间,我们在性能方面又有40%的提升。但直到最近在当前的开发分支当中,我们才集成了现场缓存(site caching)和字节码瘦身(bytecode diets)技术,才会有上面提到的150-460%性能的提升。

重要新特性

除了性能提升、bug修复和小幅提升之外,让我们关注一下正在开发的两个新的关键特性。

多元赋值(Multiple assignments)

首先要谈的是multiple assignments。

一码(代码)胜万语
def listOfN(numOfElem) \{ 1..numOfElem \}

def a, b

// variables will contain each successive element of the list
// and variables beyond the count of elements will be null
[a, b] = listOfN(1) // a list of one element
assert a == 1
assert b == null

// if there are more elements, they won't be assigned to any variable
[a, b] = listOfN(10) // a list of ten elements
assert a == 1
assert b == 2

// and you can swap variables with this notation
[a, b] = [b, a]
assert a == 2
assert b == 1


抽象语法树转换(Abstract Syntax Tree-AST Transformations)

另一关键特性就是抽象语法树转换了,此高级特性对于了解Groovy内部机理的人来说尤为有用,不过Swing的开发者可能也会对此转换特性有极大兴趣。

在Groovy的编译器编译Groovy脚本和类的同时,源代码将先在内存中形成一个具体语法树(Concrete Syntax Tree),然后再转换成为抽象语法树。此AST转换的目的是让开发者可以参与到编译过程中,并且在转变为JVM可以运行的字节码之前可以修改这个AST。通过使用annotations来修饰某些类、字段或者方法,AST转换就可以应用于这些被修饰的元素。

AST转换的一个具体的示例是使用一个新的annotation:@Bindable,这在你开发Swing的时候,尤其有用,看如下示例:
class MyBean {
    @Bindable String pro
}


当你使用@Bindable来修饰一个字段的时候,属性改变监听接口方法将被透明的加入到类的字节码中,因此现在你不需要手工编写这些方法,就可以监视此字段值的变化了,再也没有必要创建addPropertyListener()和removePropertyListener()方法来手工触发属性变化事件了。

Danno Ferrin在他的blog中给了我们一个 使用此annotation的一个概览

其他有用的转换和annotations在不久的将来也会出现。

Annotation的定义

最后但并非最不重要,正如以上所提到的,Groovy 1.5对使用Groovy创建annotations的支持依然很弱-- annotations依然需要用Java编写。现在你可以用一般的Java语法在Groovy中定义annotations。

值得注意的摘要

Groovy 1.6-beta-1是基于JDK 5构建的,但是我们还是提高了JDK 1.4的"retro-translated"版本。
不过要注意的是当运行在JDK 1.4的时候,你可能体验不到以上所说的性能的大幅提升,因为某些提升是依赖于JDK 5的某些特性 (比如util.concurrent VM 的优化)。

除了annotations, enums and generics.外,Groovy编译器生成的字节码依然是1.4的JVM字节码

有用的链接

最新beta下载:
http://groovy.codehaus.org/Download

Release notes from JIRA here:
http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=10242&styleName=Html&version=14008

总结

在此要感谢很多人,包括users, contributors, committers, G2One员工,没有你们的辛勤劳作,就没有此次新版本的革新和提高

还有特别感谢Paul King, Danno Ferrin, Alex Tkachman and Jochen "blackdrag" Theodorou,他们提供了高质量的代码。

你可能感兴趣的:(jvm,jdk,swing,perl,groovy)