JavaOne 2012:Groovy 2.0的新增功能

Guillaume Laforge(SpringSource / VMware / @ glaforge)的“ Groovy 2.0的新功能”演示文稿与Martin Odersky的“ Scala 2.10的新功能 ”演示文稿位于同一会议室(Hilton Golden Gate 6/7/8),但我决定在这些会话之间离开会议室的原因有三个:
  1. 无论如何,您倾向于在下届会议之前被踢出房间,以确保注册的人有平等的机会获得“良好席位”(并可能确保未注册会议的人不会取代已注册会议的人)。最受欢迎的会议)
  2. 这是一个比正常情况下更长的一小时休息时间(明天在JavaOne 2012的最后一天没有这样的休息时间)
  3. 外面的温度比昨天低很多,令人凉爽的是,外面的阴影笼罩在建筑物之间,凉风拂面

拉福格介绍了自己,他用带有故意的法国口音的名字说自己的名字的方式比我念他的名字的方式酷得多。 他是VMWare的Groovy项目经理,Grails框架的发起者,Gaelyk的创建者以及Groovy in Action的合著者。 拉福格(Laforge)是另一种说话,他喜欢在提问时提出问题。

Laforge列出了Groovy 1.8命令链引入的一些功能,gpars(并发/并行性),闭包改进,内置的JSON支持和新的AST转换。

Laforge展示了一个看起来像英文单词的命令链 ,但实际上是方法和参数的替代组合(其他每个单词都是方法名称,中间的单词是前一个方法名称的参数)。 除某些例外,命令链允许编写代码时不带括号和其他一些标点符号。 他展示了几个示例,包括对多个参数使用逗号。 他还解释说,无参数方法的确需要括号。

GPar与Groovy 1.8“捆绑在Groovy发行版中”,并且“涵盖了广泛的并行和并发范例”。 他强调说,“也可以从纯Java中使用它!” 对于Groovy开发人员而言,GPars更友好。

闭包批注参数是在批注中使用闭包的能力。 这是通过将闭包编码为类的形式来实现的。

因为“在函数式编程的上下文中大量使用了闭包”,并且由于Groovy具有“函数式风味,尤其是在使用闭包时,” Groovy 1.8中的Groovy闭包支持闭包记忆 。 由于将相同参数的结果缓存到同一闭包中,因此该功能可能带来性能改进。 通过诸如memoizeAtLeastmemoizeAtMostmemoizeBetween类的方法,可以更详细地了解使用缓存来获得关闭结果的memoizeBetween

Laforge解释说,Groovy从一开始就引入了强大的XML编组和解编组功能,“早在XML流行时”。 他说,因此添加类似于XML支持的内置JSON支持是很自然的。 然后,他展示了代码样本(如我喜欢的那样嵌入在幻灯片中),指示如何使用JsonSlurper 消耗JSON内容以及如何使用JsonBuilder 生成JSON内容

Groovy 1.8引入了一些新的Groovy AST,如先前JavaOne演示文稿Groovy的AST转换的介绍中所述 。 他有一些不错的幻灯片,其中结合了AST转换的简单文本项目符号和使用该AST转换的简单代码段。 新的Groovy 1.8 AST转换,他满身包括@Log代码执行控制@ThreadInterrupt例如), @ToString@EqualsAndHashCode (类似于变换到项目Lombock ), @TupleConstructor@InheritConstructors (复制所有的父类的构造函数,例如当编写覆盖Exception的类)。

恰好在演讲的中途,LaForge转为涵盖Groovy 2.0。 他说该版本已于2012年6月发布,此后还发布了一些“其他dot版本”,并包含“错误修复等”。 Groovy 2.0的关键主题包括模块化,JDK 7对齐,

Groovy的单个“全部” JAR“重达6 MB”,但“没有人需要所有东西”。 Groovy 2.0中新的核心JAR是sizs的一半(3 MB),并且有特定于模块的JAR。 如果您想使用“大Groovy旧JAR”,则仍然可以使用。

Groovy模块化的努力导致了“ 扩展模块 ”的概念。 这使开发人员可以“贡献实例扩展方法”。 此功能可用于静态类型检查,并且对IDE友好,这是其他一些Groovy方法添加动态方法无法同时享受的两个优点。 它们的结构类似于Groovy类别,并且需要META-INF / services / org.codehaus.groovy.runtime.ExtensionModule中的描述符。

因为“ Groovy支持99%Java语法”,所以Groovy支持JDK 7增强功能,例如数字文字中的下划线, 多捕获异常处理以及由于使用invokedynamic而带来的更好的运行时性能。

Groovy 2.0中最大的新功能之一是静态类型检查 ,Laforge的第一个项目符号就是这种方式:“目标:使Groovy编译器变得笨拙!” Laforge继续展示Groovy代码示例,其中包含代码中会导致编译类型损坏的内容。 他展示了@TypeChecked批注。 Groovy的某些方面无法由编译器进行类型检查。 一个例子是Groovy中流行的构建器。 这就是使用@TypeChecked有用的原因:在需要类型检查的地方使用它,而在没有意义的地方使用它。

Laforge继续展示了Groovy如何在instanceof检查之后避免显式转换 ,作为Groovy类型推断的一个具体示例。 Laforge的另一个示例演示了Groovy的静态类型检查如何捕获同一代码中数据类型的更改。

Laforge列出了一些带有静态类型检查的“陷阱”。 例如,静态类型检查器不允许使用动态metaClass。 另一个陷阱的例子是,不能确保闭包主体中的隐式“ it”变量是某种类型。 有一个Groovy增强建议可以使这种情况可以进行类型检查。 似乎任何时候Groovy在静态类型检查期间都不能保证类型时,这种情况是不允许的。 这似乎是最安全的方法。

静态Groovy代码的优点包括类型安全性,更快的代码以及不受猴子修补的影响。 这样做的代价是失去了动态功能和动态调度。 一位听众问,为什么不总是使用静态编译,而答案是我们许多人喜欢能够使用构建器和其他Groovy动态功能。 您可以将@CompileStatically批注用于要静态编译的部分。

Groovy 1.8基本优化极大地提高了性能,并且Groovy 2.0静态编译在Fibbonacci,Pi Quadrature和Binary Trees微型基准测试中与Java差距缩小。 (Laforge确实发布了有关性能基准的常见警告。)

Groovy 2.0引入了模块化,Project Coin,invokedynamic,静态类型检查和静态编译。

Laforge提到的一个有趣的旁注是“ Groovy 3有可能需要JDK 7”(使用invokedynamic)。 Laforge的幻灯片已在线发布

参考: JavaOne 2012:来自我们的JCG合作伙伴 Dustin Marx的Groovy 2.0中的新增功能,位于Inspired by Actual Events博客上。


翻译自: https://www.javacodegeeks.com/2012/10/javaone-2012-whats-new-in-groovy-20.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值