写点什么

JDK 7 出人意料将增加“简单”闭包,发布时间推迟至明年底

  • 2009-11-25
  • 本文字数:1945 字

    阅读完需:约 6 分钟

近日 Mark Reinhold 在 Devoxx 的演讲中宣布 JDK 7 将增加闭包特性。由于添加了这个饱受 争议特性,JDK 7 的发布时间将推迟至明年9 月左右。

Project Coin (旨在对 Java 7 进行小幅度的语言改进)的首席工程师 Joseph D. Darcy 已经确认语言的下一版本将增加某些“轻量级”的闭包

… JDK 7 将增加闭包特性,增加的闭包要比 BGGA(即 Closures for the Java Programming Language,译者注)所提出的闭包更小巧,因此 JDK 7 的发布时间将推迟至明年 9 月左右:

Alex Miller 也参加了此次大会,他指出尽管过去社区已经给出了 3 个不同的提案,但 Sun 对于闭包的态度还是很消极

我真的是无语了。这几年 Sun 总强调大家并没有就闭包这个问题达成共识,也延误了成立闭包 JSR 或专家组的时机,但实际情况却是社区已经给出了 3 个提案,每个提案都有相应的原型。

就在 Mark Reinhold 宣布这个消息不久,Neal Gafter(已有的 3 个闭包提案中 BGGA 提案的发起人之一,BGGA 其实就是 4 位发起者名字的首字母缩写,他们是 Bracha、Gafter、Gosling 和 von der Ahé)就发布了一个“简化的提案”:

该提案有如下变化之处: - 将控制调用(control invocation)语法移到另一个单独的规范中。

  • 将术语闭包字面量(closure literal)替换为 lambda 表达式(lambda expression)。
  • 我们检查了 lambda 表达式的语法,从 Clang 借鉴了一些精华。现在有两种形式的 lambda 表达式:expression lambda 拥有控制表达式,而 statement lambda 拥有控制语句。
  • 将术语闭包对象(closure object)替换为函数对象(function object)。
  • 将术语闭包变换(closure conversion)替换为 lambda 变换(lambda conversion),而控制调用语法将拥有一个单独的块变换(block conversion)。
  • 为 return 语句增加新的语义:现在可以从 statement lambda 中返回了。
  • 将 java.lang.Unreachable 改为 java.lang.Nothing,这一点借鉴了 Scala
  • 移除对类型名 null 的支持。之前的版本在没有异常抛出时将 null 作为一个异常类型的占位符。现在,类型 Nothing 可以满足这个要求。
  • 受限制检查。受限制(restricted)与不限制(unrestricted)的函数类型与闭包概念已经被移除了。现在所有的 lambda 表达式都是受限制的。我们可以通过控制调用语法将此前规范中的不限制闭包传递给方法。
  • 增加方法引用支持:我们通过一个新引入的符号#将对方法的引用当作函数看待。该语法来源于 javadoc 中的交叉引用 FCM 提案

JDK 7 这种突然间的变化令 Fabrizio Giudici 等很多人对决策的过程表示怀疑

我不想谈论这么做好不好(你知道在我听说该提案既不是 BGGA,也不是 CICE,而是一个新提案时我就觉得这不是一件好事)。我只是惊诧于仅仅几周后 Java 7 就与 Project Coin(知名的最终 5 提案)达成了一致,某些人几乎是瞬间就改变了主意。这到底是怎样的一个决策过程呢? 啊哈,我知道了——他们一定是投硬币决定的,现在我终于知道 Project Coin 项目名字的来历了。我担心 Java 7 会变成最混乱的一个 Java 版本——如果你想干掉 Java 的话这么做倒是不错(因为现在大家的争论点还不算太多,比如 Oracle 的收购或是关于 Jigsaw/OSGi 的争论)。

与此类似,Geertjan Wielenga 也觉得增加闭包这个决定太出人意料了

如果没人想问决策的过程是怎样的,为何得出这个结论的话,那这绝对是个好消息,或许还是最好的消息呢。首先,我们拥有一堆提案,但根本没人看。其次,突然间我们就拥有了“简单闭包”(我想知道是否现有的所有提案都可以叫做“复杂闭包”呢。难道简单就是闭包的全部么?)。好吧,闭包看起来会很简单,没有非局部的 return(non-local return)、没有控制语句、无法访问非 final 变量。我还是想问一下,到底是如何得出这个决定的?

Cay Horstmann针对这个新的BGGA 提案给出了几个用例,与 FCM 提案何其相似:

我们真的不知道 Sun 到底想搞什么。之前我粗略地分析了一下 BGGA 0.6a 提案,总体上来说与现在的 BGGA 差不多。没人反对 BGGA 与 FCM 的相似性。没有非局部的 return、用于 lambda 的#。由于需要在捕获前用 @Shared 注解突变变量(mutated variable),人们在编写之前可能需要考虑再三。

复制代码
foreach(@Shared String v : values)
funcs.add( #() => v);

Alex Miller 提到 JDK 发布的延期可能会让其他特性有机会加到最终的发布中,比如 ParallelArray 程序库,它为映射、过滤以及 Java 对象数组的裁剪提供了一套函数风格的 API:

我在 QCon 上与 Bob Lee 聊了一会,他觉得 JDK 7 的延期有可能会将 ParallelArray 纳入进来并使用新的闭包支持。

大家可以在 InfoQ 上找到关于闭包 JDK 7 的更多信息!

请阅读本文的各位读者参加 InfoQ 的小调查。

查看英文原文: JDK 7 Unexpectedly Gets “Simple” Closures, but is Pushed Back to End of 2010

2009-11-25 00:292899
用户头像

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

关注

评论

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

传统架构VS云原生:如何更好的选择搭配

膨胀

#技术人的2023总结

Python基本操作详解。

百度搜索:蓝易云

Python Linux 运维 Web 云服务器

苹果Mac图像修图软件Photomator和Pixelmator Pro 有什么区别?

Rose

Pixelmator Pro Mac修图软件 Photomator

如何使用 Transmit mac高效管理远程文件?

Rose

Transmit下载 Transmit mac使用教程 Mac远程管理软件 Transmit 中文 版

SVN客户端:Cornerstone mac版的配置与使用 附Cornerstone许可证

Rose

cornerstone 4破解 Mac版Cornerstone许可证 Cornerstone使用教程 Cornerstone如何配置

解析小红书笔记详情API的最佳实践与案例分享

技术冰糖葫芦

API

解决Mac苹果上运行VMware Fusion虚拟机提示“未找到文件”的方法

Rose

未找到文件 VMware Fusion虚拟机 Mac虚拟机下载 VM激活秘钥

阿拉丁「全网小程序创新与发展共话系列峰会·杭州站」完美落幕

Geek_2d6073

Topaz Photo AI 在导入图像时冻结 (Mac)

Rose

Topaz Photo AI 无法启动 Mac图像编辑

Axure RP授权码 附汉化包下载 兼容M/intel

Rose

Axure RP 9汉化 Axure RP 9授权码 Axure RP 10 汉化版 mac破解软件下载 mac原型设计软件

面试官:说一下MySQL主从复制的原理?

王磊

Java 面试

一篇文章彻底搞懂TiDB集群各种容量计算方式

TiDB 社区干货传送门

监控 管理与运维 TiDB 源码解读 TiKV 源码解读

TiDB-Server 常用 API

TiDB 社区干货传送门

管理与运维

Mac值得推荐SSH终端工具mac securecrt-支持M1/M2

Rose

mac软件下载 SecureCRT下载 SecureCRT Mac破解版 ssh终端工具下载 SecureCRT 安装教程

家页观察丨万华生态绿色化、工业化、数字化助力城市更新

Geek_2d6073

苹果mac视频下载器:Downie4下载画质的设置方法

Rose

Mac 视频下载工具 Downie4许可证 Downie 4 Mac版 Downie4清晰度设置

TiDB Placement Rule实战总结

TiDB 社区干货传送门

实践案例 6.x 实践 大数据场景实践 7.x 实践

冲突管理最佳实践

俞凡

管理 最佳实践 沟通

从0到1快速入门ETLCloud

RestCloud

ETL 数据集成平台 数据集成工具

Microsoft Office LTSC 2021 Mac版授权许可下载

Rose

office2021下载 Office LTSC 2021 office2021 Mac破解版 office许可证下载

喜讯!云起无垠获评ISC 2023数字安全创新能力百强双料大奖

云起无垠

【火热报名中】TiDB 社区活动在北京:1月7日(周日)新年围炉茶会,来唠唠嗑,回顾过去一年,展望未来

TiDB 社区干货传送门

D-Night桌研社北京首店12月30日正式开业,学生和新客特价2.5折起

科技热闻

恭喜神州数码集团,荣获“TiDB 社区最佳贡献企业”

TiDB 社区干货传送门

一个 39.3T 的集群从TiDB v3.1.0迁移升级到 TiDB v7.1.2 的实践

TiDB 社区干货传送门

迁移 实践案例 版本升级 大数据场景实践 7.x 实践

强大的跟踪和动画软件:Boris FX Mocha Pro 2023破解下载

胖墩儿不胖y

Mac软件 动画软件 Mac好用的软件推荐

哪里有Parallels虚拟机资源?如何安装激活PD虚拟机?

Rose

Mac虚拟机下载 Parallels虚拟机下载 PD虚拟机授权秘钥

超60%项目来自高校科研院所 | 2023值得关注的硬科技创变者50强重磅发布

创业邦

1688商品详情数据接口(1688.item_get)

tbapi

1688API接口 1688商品数据接口 1688商品详情数据接口 1688数据接口 1688商品详情API接口

TiDB是如何在国有大银行实现数据库业务“一换三”的

TiDB 社区干货传送门

7.x 实践

Ubunt20.04安装Gramine教程。

百度搜索:蓝易云

Python Linux ubuntu Web Linux云服务器

JDK 7出人意料将增加“简单”闭包,发布时间推迟至明年底_Java_Dio Synodinos_InfoQ精选文章