Mark Reinhold 谈 Java 闭包

阅读数:1442 2009 年 11 月 25 日

话题:Java编程语言语言 & 开发架构

在近日召开的 Devoxx 大会上爆出消息:Sun 将在 Java 中增加闭包,紧跟着 Mark Reinhold 发表了一篇博文揭示了该决定背后的一些内幕。

Java 闭包的主要应用场景在于并行编程。Reinhold 说使用类似于并行数组这样的工具需要太多的 Java 样板代码,如果将闭包引入到语言中则可以减少样板代码的数量。他继续说到:

在过去几年中有 3 个提案都涉及到为 Java 增加闭包,他们分别是:BGGA、CICE 和 FCM。这些提案都涵盖了广泛的复杂性及强大的功能。在深入理解这些提案后,我觉得每个提案的想法都很棒但没有一个完全适合于“可以使用的程序员语言”这一着眼点。

要想支持并行编程,我们只需要两个主要的特性即可:

  • 编写闭包的语法。
  • 函数类型,这样闭包就会成为类型系统中的一等公民。
要想将闭包与语言和平台的其他部分集成起来我们还需要另两个特性:



  • 闭包变换,这样恰当类型的闭包就能用在需要单方法接口或是抽象类对象的地方。
  • 扩展方法,这样面向闭包的大数据量方法就可以经过翻新应用到现有的程序库中,尤其是集合框架而不会破坏兼容性。

Java 饱受诟病的一点就是缓慢的发展速度。但有时这种批评显得太过火了(比方说从 C++ 上次更新到现在的时间内 Java 已经发布 4 个主要版本了)。假如能够以一种不会直接影响语言的方式对 Java 进行试验,那么这种方式就是积极的。在此前的文章中,我探索了 3 种不同的技术来实现这一点,他们分别是 DSL、Java 6 的注解处理器以及为语言和 IDE 增加语法糖,虽然每种技术都很棒,但我们发现他们在闭包支持上都无法摆脱固有的限制。Sun 的解决方案是在决定是否将该特性作为 Java SE 的标准前利用 JDK 7 项目本身进行试验。Reinhold 说到:

如前所述,Sun 将开始设计并实现简单闭包并将其增加到 JDK 7 中以进行更广泛的试验。如果一切顺利,我们将提交一份语言变化 JSR 并将其作为最终 Java SE 7 JSR 的一个组件。

Sun 很渴望“每个人都能参与到早期闭包的讨论中,有人能提出自己的观点”,同时一个设想的提案也将于不久后发布。

查看英文原文:Mark Reinhold on Closures for Java