在过去的几年中,关于将闭包作为Java SE 7 的一部分或者在将来的某个未定的版本加入Java 语言中,引起了广泛的讨论。对此已经有了一些提案( BGGA , CICE , FCM )并且达成了一致意见。一种思考目前可用提案的角度是考虑闭包对于Java 语言的冲击:在经历了基本性的变化后Java 是否可能依然保持“Java 的感觉”。 Joshua Bloch 在 Javapolis 表达了他对于争论的观点 ,以及为什么他认为 CICE 是一种更合适的方式。
为了描述 Java 的感觉,Joshua Bloch 引用了 Gosling 在 1997 年 6 月 IEEE Computer 的一篇论文。
Java 是一种蓝领语言。它不是博士论文的内容而是一种工作语言。许多不同的程序员都觉得 Java 很熟悉,因为我们喜欢经过考验的事物。
他问道,“我们做的怎么样”,然后回答“不是非常好。” 通过引证了一篇 427 页的 FAQ 并且引用了一些用户的意见,他认为 Java 泛型是破坏了 Java 的感觉的一个变化,因为泛型带来了 Java 特征之间的指数级别的相互作用,并且得出了如何保持 Java 感觉的方法:
- 我们不能再承受任何通配符
- 要增加新的语言特性必须经过非常慎重的考虑
- 对于概念层的增加越少越好
- 新增的部分必须有高能效比
在简要的回顾了将闭包加入 Java 语言中的原因之后,Joshua Bloch 对于 BGGA 闭包提案的一些有争议的特征进行了讨论:函数类型(难以阅读的代码,鼓励“诡异的”编程风格,出人意料的相互作用);非局部 return、break 和 continue(令人费解的,阴险的 bug,变化的意义);无限制的访问非 final 的局部变量(另人费解,影响性能)以及 将库定义的控制构造器作为一个设计目标(不如特定构造器那么丰富,可能会慢一些,增加了复杂性)。
他还回顾了他提出的提案——简明实例创建方式(Concise Instance Creation Expressions——CICE)的要点:
- 创建匿名类实例的简明语法
- 用于自动资源管理的特定构造器
他对于那些希望在 Java 平台上看到更多语言变化的人提出了一个替代方案:
我们必须牢记这样的事实,对于 JVM 来说已经有一个很好编程语言提供了这么多功能,而且还添加了 Java 的互操作性:Scala。
最后,Joshua Bloch 描述了两种方式来给 Java 增加闭包特性:
从原型得到更多的经验
- 当我们达成了广泛地一致意见时,就开始在小范围内讨论 JSR
- 这个过程也许需要几年
- 遵守以前建立的先例
在不久的将来开始在大范围内讨论 JSR
- 必须允许提出任何关于闭包规范的观点
- 第一个任务是回答两个大问题
- 我们需要作出重大的决策!
- 这对于 Java 平台的未来会有重大的影响。
- 我们必须为此付出时间并且做正确的事情。
- 我们绝不能进一步的伤害“Java 的感觉”。
从一个Javapolis 投票所得到的结果是多样的:30 个参与者投了CICE 的票,BGGA/FCM+JCA 得到了24 票,19 票给了不做变化。在一个反响热烈的 Javalobby 上的一个讨论中, 反映很迅速而且是两极分化的,有些人认为 Joshua Bloch 在比较不同的提案的时候有明显的偏袒。另外一些人赞成这一观点,认为如果你需要这些特性,你应该使用 Scala。一些人觉得 BGGA 作为一个特 征会使得 Java 过于复杂,还有人认为复杂之处很少,不会影响日常工作。Carsten Saager喜欢CICE 。Stephen Colbourne仍然喜欢他的FCM 提案。 Neal Gafter 的回答简短而切中要害;他认为BGGA 的语法在大多数真实世界的场景中会产生更简单的代码,他用Doug Lea 的fork-join 框架作为例子并让大家去 阅读他的关于非局部转移问题的解决方案。Bharath 的博文详细的描述了在评论中日益增长的一种观点:这种争论表明我们应该谨慎从事,不要在没有理解后果之前对Java 做大的变动。 Tim Bray 和 Michael Kolling 加入了“反对的”阵营,反对将闭包加入 Java。Tim Bray 这样说:
我的观点很简单:Java 工作的这么好是因为他符合 80/20 原则。照我的看法,Java 是史上最高调的、最干净的、符合 80/20 原则的技术。直 到泛型出现以前,对于 Java 中随后的 20%的尝试几乎是无害的,泛型是一个灾难;它让 Java 难以学习,难以理解,而且你不能避免泛型。
一件确定的事情是:我们还没有结束对于 Java 闭包的讨论。
查看英文原文: Closures and Preserving the Feel of Java - - - - - -
译者简介: 曹云飞,西安交通大学计算机软件硕士。现就职于 Ethos ,热衷于计算机理论与应用技术的钻研,软件架构与敏捷开发,目前从事 consumer product 方面的工作。参与 InfoQ 中文站内容建设,请邮件至 china-editorial[at]infoq.com 。
评论