AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

Guillaume Laforge 谈 Groovy 2.1

  • 2013-02-24
  • 本文字数:2494 字

    阅读完需:约 8 分钟

近日,SpringSource 发布了 Groovy 2.1

在该版本中,Groovy 添加了几个新特性:

  • 完全支持 Java 7 的 invokedynamic
  • 通过特殊的注解来辅助文档与领域特定语言的类型安全,超越了传统的静态类型检查能力
  • 新增的编译自定义选项
  • 用于组合注解的元注解设施
  • GPars 1.0,Groovy 的并发框架

InfoQ 有幸采访了 SpringSource Groovy 部门的领导 Guillaume Laforge 以了解这些变化以及 Groovy 的成功之处。

InfoQ:invokedynamic 是如何简化 Groovy 运行时的开发工作的?

Laforge:我们不能说 invokedynamic 简化了 Groovy 运行时的开发工作,我们依然将精力放在常规的缓存技术上以加快动态运行时的速度,因为我们希望用户依然可以使用 JDK 5 或 6。实现 invokedynamic 并不是那么简单的事情,因为各种 JDK 7 更新并不是完全稳定且没有瑕疵的。幸好,随着底层 VM 实现与 APIs 的不断成熟,这种情况已经有了极大的改观。因此,在未来的 Groovy 版本(如 Groovy 3)中将只会使用 invokedynamic,那时 JDK 7 将是所需的 JDK 的最低版本。接下来,我们就可以摆脱自己所用的一些小技巧,而不必在代码基上使用两套代码路径了。

InfoQ:invokedynamic 在性能上是否有明显的改进呢?

Laforge:invokedynamic 可以让我们更具效率,特别是在内存使用上,因为我们就不需要在运行时生成那么多的类了,这样占用的内存会更少。对于性能来说,我们已经注意到一些重大的改进了。现在还很难给出一个百分比数字,因为在不同的微基准上,其变化还是非常大的。

InfoQ:哪些用例能从这种性能改进上获得最大的好处?

Laforge:Groovy 已经在使用原生类型计算方式了,因此对于那些数学密集型基准来说,Groovy 的运行速度已经与 Java 不分伯仲了,所以说 invokedynamic 对于速度上的提升并没有那么大。 大量依赖方法调用的代码会得到最好的改进,在某些情况下,方法调用的速度是以前的两倍之多!此外,结果在很大程度上还取决于我们所用的 JDK 7 更新版本。总的来说,结果很不错,我们对 invokedynamic 很满意。

此外,invokedynamic 还有助于优化我们的代码基,因此对于那些无法升级至 JDK 7 的用户来说可以从中获益。最终,对于动态代码来说,invokedynamic 可以使我们在很多情况下都能达到与老的优化技术相当的结果,而且还不会引入他们的缺点。如果使用我们在 Groovy 2.0 中所添加的静态编译特性,那么代码可以与 Java 一样类型安全,速度也有保证。

InfoQ:为了保证语言的可读性,你在引入或拒绝新的语言概念时遵从什么样的流程呢?

Laforge:语言演化是个很有意思的问题。在过去几年中,我们对语言新特性添加的要求更为严格,因为我们不希望语言变得过于复杂而无法理解与使用。此外,我们还严格坚持某些基本的可读性与一致性原则。 首要的是,我们一直希望能与 Java 的语法保持紧密的联系,这样 Groovy 学习起来就会容易一些,更易于被具有 Java 背景的新的开发者所用。据说,每个 Java 开发者实际上都是 Groovy 开发者!

其次,我们不希望简洁导致语言变得过于神秘。我们总是希望 Groovy 成为一门易于学习且维护的语言。这正是我们为何不使用 ASCII-art 操作符的原因所在,因为没人能够理解它。

在社区的帮助下,我们总能在语言特性上达成一致,能够在简洁、效率与可读性上达到最佳的平衡,这可以确保语言的优雅性与易用性。

InfoQ:显然,invokedynamic 要求你抛弃过去的一些代码,为了避免回归问题需要做哪些测试呢?

Laforge:在过去几年中,我们积累了大量的测试套件,包含了来自于用户、框架开发者等的用例,这都是为了强化实现以避免向后不兼容问题的发生。我们在各种系统环境和 JDK 版本下运行了所有的测试套件,就是为了确保高质量与向后兼容性。

InfoQ:在 2.1 版中引入了哪些其他的编译自定义优化特性呢?

Laforge:Groovy 2.1 在编译定制化方面进行了一些精化。 Groovy 非常适合于实现领域特定语言,出于这个目的,Groovy 带有很多技巧,开发者可以操纵已经编译好的代码。你可以挂进编译过程来转换代码(我们称之为“AST 转换”,可以将其看作是一种编译宏),比如说,可以添加新方法、添加导入,也可以限制语法元素等。

Groovy 2.1 简化了配置编译器以使用这些技术的过程,你可以使用特殊目的的 DSL(Groovy“构建器”)来描述编译器的配置,用户也可以指定包含自定义配置的脚本位置,然后传递给 Groovy 编译器。

最后,我们的目标是简化想要进一步利用 Groovy 领域特定语言能力的开发者与框架作者的工作量。

InfoQ:能否介绍一下新的元注解特性么?

Laforge:注解在 Java 生态圈中得到了很好的应用。但有时使用的注解有些太多了,对于一个简单的成员变量、方法或是类来说,你可能会声明好几个注解。 在 Groovy 生态圈中,我们使用注解来触发某些 AST 转换,给定的类集(就像是应用的领域类)可能一直都需要相同的注解集,因此你可能想要将几个注解放到一个当中。这正是元注解系统想法由来的原因。

某些框架(如 Spring Framework)提供了定义元注解的功能。这通常是特定于框架的解决方案,我们想要更加通用一些的解决方案,这样就可以脱离特定的框架而使用了。

我们这里的做法是在编译期使用元注解所包含的注解来替换掉它。通过这种方式,类、成员变量、方法与参数会使用组合后的注解,而不是框架在运行期需要处理的元注解。

最后,借助于元注解,代码的可读性与表述力会更好,你可以在编译期而非运行期使用包含其他注解的更高层的注解。

InfoQ:Groovy 的下一个主发布会有哪些值得期待的特性呢?

Laforge:在 Groovy 的下一个主版本中,我们尚未计划任何重要的语言特性。显然,我们已经有了一些关于新特性的想法,但我们还是将大部分精力放在了语言的架构与实现上:其动态特性、编译后端与语法等等。 目前,我们正在为完全重写的动态后端编写一个原型(“Meta-Object Protocol”),该原型完全基于 invokedynamic,这么做是为了更好地利用 JVM 的性能,促进我们的动态特性。

稍后,我们将使用新发布的 Antlr v4 分析程序生成器来重写语言的语法,这是为了保证语法的平稳进化,同时确保语法的维护工作能更加容易一些。

查看英文原文: InfoQ Speaks to Guillaume Laforge about the Recent Groovy 2.1 Release

2013-02-24 09:381296
用户头像

发布了 88 篇内容, 共 266.8 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

RISC-V开发板关机流程浅析

优麒麟

Linux 技术 risc-v开发板 优麒麟

“天生要强”的迭代和蒙牛体育IP大满贯

科技新消息

AIOps(智能运维)中的指标算法场景分享 | 内附视频&ppt资料

云智慧AIOps社区

人工智能 AI 算法 运维 告警

音视频开发—时间戳相关整理(时间基tbr,tbn,tbc)

Linux服务器开发

WebRTC ffmpeg SRS 音视频开发 流媒体服务器开发

你的产品越来越难卖?是时候关注价值流了

基调听云

DevOps APM 智能运维 基调听云

WhiteSource 是否容易受到“Spring4Shell”漏洞 CVE-2022-22965 的影响?

龙智—DevSecOps解决方案

Spring4Shell WhiteSource

2022第十四届南京国际人工智能产品展会

InfoQ_caf7dbb9aa8a

快速摆脱在线扩容难的噩梦,华为云数据库有妙计!企业级Redis 包年18元~

华为云数据库小助手

GaussDB GaussDB ( for Redis )

Whats On Tap | Tapdata Cloud 如何助力大型家居连锁商城推进数字化经营?

tapdata

传统数据库改造难?华为云GaussDB“五心”解决

华为云数据库小助手

GaussDB

大数据洞察画像自动化实践

网易云信

大数据

ElasticSearch写入流程详解

IT巅峰技术

elasticsearch

Postman中文版客户端

Liam

Jmeter Postman API swagger Mock

沙龙:如何使信息系统更加稳定

博睿数据

首个!青藤蜂巢荣获网络安全卓越验证中心&泰尔实验室双认证

青藤云安全

网络安全 青藤

东方园林应邀参加人民网《人民会客厅——两会时刻》栏目访谈

科技大数据

安装配置GPU训练环境

十三

精彩回顾 | 金融服务数字化生态的开放与安全

FinClip

金融 数据安全

基调听云直播回顾 | 让业务系统不再深不可测

基调听云

APM 可观测性 智能运维 基调听云

TDengine 荣获 CSDN IT 技术影响力之星 “年度开源项目” 、 “年度IT领军人物”奖项

TDengine

数据库 tdengine 开源

“中国牛”、“天生要强”翻新,2022蒙牛继续大满贯

科技新消息

启动报名2022南京智博会 第十四届南京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

物联网

解决方案体现的是一个公司的深度思考能力

基调听云

APM 智能运维 业务运维 基调听云

蒙牛中国乳业产业园牧场建设项目全面复工

科技新消息

信通院牵头数列科技参与主编的《信息系统稳定性保障能力建设指南》正式发布

TakinTalks稳定性社区

AI 加持实时互动|ZegoAvatar ⾯部表情随动技术解析

ZEGO即构

计算机视觉 即构科技 Avatar

Tapdata Cloud 2.1.2 来啦:大波细节已就绪!字段类型可批量修改、支持微信扫码登录、新增支持 Vika 为目标

tapdata

持续精进,性能突破,openGauss 3.0社区版正式发布

Geek_32c4d0

GaussDB(for openGauss) 社区版

WEB安全:深入反射式dll注入技术

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

Redis 布隆(Bloom Filter)过滤器原理与实战讲解

码哥字节

布隆过滤器 4月日更 Redis 数据结构 4月月更

蒙牛:以新营销和“更好”的年轻一代共鸣

科技新消息

Guillaume Laforge谈Groovy 2.1_Java_Victor Grazi_InfoQ精选文章