🔍
📢

Apache Groovy 2.5 正式版及3.0预览版

Apache基金会最近发布了Groovy2.5,新功能包括:

  • AST转换的改进
  • 新的宏支持
  • 其他杂项改进

运行Groovy 2.5至少需要JDK 7,在JDK 9+上运行可以忽略良性警告。

尽管最近人们把关注点转到了其他JVM语言上(如Kotlin),但Groovy仍然有很大的增长。正如Groovy提交者、OCI首席软件工程师Paul King博士在最近的一次网络研讨会上所说的:

Groovy的下载量说明,它仍然是继Java之后JVM上第二大最受欢迎的语言,而且这个数字还在不断增加。今年第一季度,下载次数为9000万次,比去年第一季度下载次数的两倍还要多。所以我们可以看到,人们仍然对Groovy很感兴趣。

在过去的12个月里,Groovy增加了30个新的提交者。

AST转换——注解

为了保证转换之间的一致性,对很多现有的AST转换进行了改进,并在2.5版本中添加了11个新的转换。在Groovy 3.0中添加了一个额外的转换,但在GA发布之前可能会出现更多转换。

 

AST转换——宏

如上所述,Groovy提供了大量的内置AST转换。开发人员也可以创建自己的自定义转换,前提是需要了解Groovy语法结构的内部表示。

2.5版本中的宏功能消除了了解语法结构内部表示的需要,正如发行说明中所定义的那样:

在创建编译时元编程扩展时,宏可以让你直接使用Groovy语法,而不是使用内部编译器表示。因此,转换的创建将掌握在所有Groovy程序员手中,而不仅仅是Groovy编译器创建者。

例如,假设开发人员希望创建一个转换(@Info),用于生成一个方法(@getInfo())。在2.5版本之前,需要编写以下代码:

...
def clazz = new MethodCallExpression(new VariableExpression("this"), "getClass", EMPTY_ARGUMENTS)
def body = new ExpressionStatement(new MethodCallExpression(clazz, "getName", EMPTY_ARGUMENTS))
classNode.addMethod('getInfo', ACC_PUBLIC, STRING_TYPE, EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, body)
...

有了宏以后,上面代码中的前两行可以替换为:

def body = macro(true) {
    getClass().name
    }

更多详细信息可以查看发行说明。

Groovy 3.0

Groovy 3.0.0-alpha-3从6月下旬开始就可用,并计划于今年晚些时候推出其他beta版,候选版本预计于2019年初发布。

Groovy 3.0至少需要JDK 8才能运行,并对JDK 9及更高版本的支持进行了改进。一个名为Parrot Parser的新解析器将支持新的Groovy语法,这是一个重要的新特性。