感谢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,他们提供了高质量的代码。
分享到:
相关推荐
Groovy-2.4.0-beta-1.zip 是一个压缩包,其中包含了Groovy编程语言的一个特定版本,即2.4.0的测试版1。Groovy是一种动态、灵活的面向对象的脚本语言,它运行在Java平台上,并且与Java紧密集成。Groovy提供了简洁的...
(1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...
Apache Groovy SDK 2.5.0-beta-2是一个重要的软件开发工具包,专为Groovy编程语言设计,这是Groovy的一个预发行版本,旨在在正式发布前进行测试和优化。Groovy是一种强大的、动态的、基于Java平台的脚本语言,它提供...
1. **增强的Swing组件**:JDK 1.6对Swing库进行了大量优化,包括更好的UI设计、性能提升以及更多的组件选项,使得开发者能够构建更加用户友好的桌面应用。 2. **动态语言支持**:Java 6引入了JSR 223(Scripting ...
"groovy-xml-2.2.0-beta-1.zip" 文件是Groovy的一个版本,专注于XML处理功能,特别适用于在Groovy中解析、操作和生成XML文档。这个版本为2.2.0的beta-1,意味着它是该版本系列中的早期测试版,开发者可能在其中寻找...
赠送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...
赠送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...
赠送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-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版本,希望...
赠送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...
1. **构建脚本**:Gradle 使用基于Groovy或Kotlin的动态脚本来定义项目构建过程,这些脚本包含了构建逻辑,如编译、测试、打包等任务。在 `build.gradle` 文件中编写这些脚本。 2. **DSL(Domain Specific Language...
赠送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 2.5.0-beta-2是这个语言的一个重要版本,它在2017年11月9日发布时,被视为Groovy的最新稳定版,文件大小约为15.4 MB。此版本的文档包含了全面的Groovy 2.5 API和开发者指南,旨在帮助用户理解和使用这一版本...
最新的groovy 1.6的API参考,chm格式,方便查找和搜索,从那个javadoc的文档编译而来。
groovy-all-2.4.15.jar文件,MAC使用时需存放在/Users/用户名/.gradle/caches/jars-3/某一缓存目录下,找不到就都看一下,我遇到的问题是缓存目录中下载的是2.4.17版本,应该跟gradle版本升级有关
org.gradle.api.resources.ResourceException: Could not get resource '...下载groovy-all-2.4.15.jar后,放入对应的 android-studio/gradle/gradle-5.*/lib/目录。 重启 Android Studio 及可使用。
1. **类型推断**:虽然Groovy是动态类型的,但在1.6.4版本中,它支持类型推断,这有助于提高代码的可读性和性能。 2. **闭包**:Groovy的闭包是其强大的功能之一,它类似于函数指针或lambda表达式,可以作为参数...
1. **Groovy简介** - Groovy是一种基于Java虚拟机(JVM)的编程语言,它与Java高度兼容,可以直接调用Java库。 - 它引入了脚本语言的简洁性和灵活性,同时保留了静态类型的强类型特性,支持动态类型和静态类型的...
1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...