`
agile_boy
  • 浏览: 558210 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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,他们提供了高质量的代码。

5
2
分享到:
评论
5 楼 agile_boy 2008-06-27  
def f = gsh.find('.', '-name', '*.java', '-ls');
官方的例子,看对你有用么额

此外,那些shell命令跟Os也相关的吧
4 楼 groovyzhou 2008-06-27  
多谢了!
不过在groosh里面似乎不能使用通配符
def gsh = new groosh.Groosh();
gsh.ls("*.txt") //Error

print "ls *.txt".execute().text //这样也不行

这个问题该怎么解决啊
3 楼 agile_boy 2008-05-24  
建议使用groovysh
2 楼 groovyzhou 2008-05-24  
请教一个问题, 关于在groovy里调用外部命令的问题

在perl里面 通过 system "ls"
就可以直接运行ls命令

在groovy里面好像是 "ls".execute()
但是这样返回的是一个Process,而不是像perl那样直接把结果输出到屏幕
为了看到结果,我是这么做的 "ls".execute().in.eachLine { println it }
不知道有什么简便的方法没有

多谢了!
1 楼 山风小子 2008-05-03  
Groovy1.6beta1的发布着实让人兴奋不已!

相关推荐

    groovy-2.4.0-beta-1.zip

    Groovy-2.4.0-beta-1.zip 是一个压缩包,其中包含了Groovy编程语言的一个特定版本,即2.4.0的测试版1。Groovy是一种动态、灵活的面向对象的脚本语言,它运行在Java平台上,并且与Java紧密集成。Groovy提供了简洁的...

    groovy-all-1.6-beta-1.jar中文-英文对照文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    apache-groovy-sdk-2.5.0-beta-2.zip

    Apache Groovy SDK 2.5.0-beta-2是一个重要的软件开发工具包,专为Groovy编程语言设计,这是Groovy的一个预发行版本,旨在在正式发布前进行测试和优化。Groovy是一种强大的、动态的、基于Java平台的脚本语言,它提供...

    jdk1.6-64位

    1. **增强的Swing组件**:JDK 1.6对Swing库进行了大量优化,包括更好的UI设计、性能提升以及更多的组件选项,使得开发者能够构建更加用户友好的桌面应用。 2. **动态语言支持**:Java 6引入了JSR 223(Scripting ...

    groovy-xml-2.2.0-beta-1.zip

    "groovy-xml-2.2.0-beta-1.zip" 文件是Groovy的一个版本,专注于XML处理功能,特别适用于在Groovy中解析、操作和生成XML文档。这个版本为2.2.0的beta-1,意味着它是该版本系列中的早期测试版,开发者可能在其中寻找...

    groovy-3.0.9-API文档-中英对照版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    groovy-3.0.9-API文档-中文版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy-all-2.4.5-API文档-中英对照版.zip

    赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...

    groovy-all-2.4.13-API文档-中文版.zip

    赠送jar包:groovy-all-2.4.13.jar; 赠送原API文档:groovy-all-2.4.13-javadoc.jar; 赠送源代码:groovy-all-2.4.13-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.13.pom; 包含翻译后的API文档:groovy...

    gradle-1.6-src

    1. **构建脚本**:Gradle 使用基于Groovy或Kotlin的动态脚本来定义项目构建过程,这些脚本包含了构建逻辑,如编译、测试、打包等任务。在 `build.gradle` 文件中编写这些脚本。 2. **DSL(Domain Specific Language...

    groovy-all-2.4.5-API文档-中文版.zip

    赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...

    apache-groovy-docs-2.5.0-beta-2.zip

    Groovy 2.5.0-beta-2是这个语言的一个重要版本,它在2017年11月9日发布时,被视为Groovy的最新稳定版,文件大小约为15.4 MB。此版本的文档包含了全面的Groovy 2.5 API和开发者指南,旨在帮助用户理解和使用这一版本...

    groovy 1.6 reference manual-chm

    最新的groovy 1.6的API参考,chm格式,方便查找和搜索,从那个javadoc的文档编译而来。

    groovy-all-2.4.15.jar.zip

    groovy-all-2.4.15.jar文件,MAC使用时需存放在/Users/用户名/.gradle/caches/jars-3/某一缓存目录下,找不到就都看一下,我遇到的问题是缓存目录中下载的是2.4.17版本,应该跟gradle版本升级有关

    apache-groovy-sdk-4.0.1下载

    1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...

    groovy-all-2.4.15.jar

    org.gradle.api.resources.ResourceException: Could not get resource '...下载groovy-all-2.4.15.jar后,放入对应的 android-studio/gradle/gradle-5.*/lib/目录。 重启 Android Studio 及可使用。

    groovy-binary-1.6.4

    1. **类型推断**:虽然Groovy是动态类型的,但在1.6.4版本中,它支持类型推断,这有助于提高代码的可读性和性能。 2. **闭包**:Groovy的闭包是其强大的功能之一,它类似于函数指针或lambda表达式,可以作为参数...

    groovy-all-2.4.8.jar

    1. **Groovy简介** - Groovy是一种基于Java虚拟机(JVM)的编程语言,它与Java高度兼容,可以直接调用Java库。 - 它引入了脚本语言的简洁性和灵活性,同时保留了静态类型的强类型特性,支持动态类型和静态类型的...

Global site tag (gtag.js) - Google Analytics