今天看到InfoQ上的文章:Java 7 路线图更新:反响强烈 其中关于“闭包(closure)”的争论引起了俺的兴趣:
Ricky Clarkson认为没有闭包Java将灭亡
Martin Kneissl也认为Java 7中没有闭包是个坏消息
Dustin Marx在关于Java 7中最期待的特性的帖子中对闭包有一些矛盾的看法
Osvaldo Doederlein对新特性感到兴奋,不过仍然很期望闭包
对于如此万众期待的功能,为什么JDK开发团队最终决定不实现呢?而俺对Closure正好不太明白,就查了查Wikipedia关于closure的定义。从中发现了蛛丝马迹:
A language implementation cannot easily support full closures if its run-time memory model allocates all local variables on a linear stack. In such languages, a function's local variables are deallocated when the function returns. However, a closure requires that the free variables it references survive the enclosing function's execution. Therefore those variables must be allocated so that they persist until no longer needed. This explains why typically languages that natively support closures also use garbage collection. The alternative is for the language to accept that certain use cases will lead to undefined behaviour, as in the proposal for lambda expressions in C++.[4]
据我所知,Java语言对local variables的实现正是基于linear stack的(如果我错了,请大侠们指正)。也就是说,如果要基于现在的Java语言实现来加入closure功能是比较复杂且不优雅的,而且还有可能导致"undefined behaviour"。
换句话说,我猜想并不是JDK开发团队不想加入这个功能,而是他们在权衡得到的好处和付出的代价之后(主要是代价太大),最终不得不忍痛割爱了。
想得更深一步,现在以及未来,JVM已经不再仅限于支持Java语言的运行了。在这样的大背景下,类似closure这样的功能已经不应该再是一个可选择的特性。那么,对于JDK和JVM的实现,是否是时候来一次大的refactor了呢?
分享到:
相关推荐
### JDK 7及以后版本的新特性:模块化与闭包 #### 一、概述 随着Java平台的发展,Oracle公司不断引入新的特性和优化来增强Java的功能性和效率。JDK 7作为Java发展的一个重要里程碑,引入了多个重要的新特性,包括...
Lambda 表达式是一个匿名函数,也可以称作闭包(Closure),它可以将函数作为参数传递给其他函数或从函数中返回。在 Java 8 中,Lambda 表达式可以用来实现函数式编程。 遍历数组的方法 在 Java 8 中,可以使用 ...
Plovr构建需要Java Development Kit(JDK)7或更高版本, 和zip 。 遵循,请仔细检查您是否遵循有关构建Java项目和操作系统的说明。 如果您在安装Buck时遇到问题(在Windows上可能并非易事),请与Buck团队联系。 ...
学生提问:为什么即使我没有给多行文本域编写右键菜单,但当我在多行文本域上单击右键时一样会弹出右键菜单? 418 11.7 在AWT中绘图 418 11.7.1 画图的实现原理 418 11.7.2 使用Graphics类 419 11.8 处理位图 ...
例如,Groovy提供了闭包(Closure)的概念,它可以作为参数传递给函数,增强了函数式编程的能力。此外,Groovy对集合操作进行了增强,如便利的列表和映射操作,以及对Java流的支持。 学习和理解这些CHM文件中的内容...
关闭模板生成器 该项目旨在用于编写简单的闭包模板、... 用于将闭包编译为 JS 函数的二进制文件和依赖项,以及网页 JS 依赖项 模板/ 存储模板项目的根目录。 模板/[PROJECT_NAME] 一个项目目录。 这包含 .soy 文件和
#### 三、闭包(Closure) 闭包是Groovy中最突出的特性之一,它是一个可存储在变量中的代码块,可以访问外部作用域中的变量。闭包提供了强大的功能,如延迟执行、数据绑定等,是实现函数式编程风格的关键。 #### ...
1. **构造文法项**:首先,需要将给定的上下文无关文法规则转化为规范形式,通常为GOTO-CLOSURE形式。每个文法项包含一个非终结符和一个可选的已读符号串,后跟一个点和剩余的规则部分。 2. **构造状态**:通过GOTO...
它支持面向对象编程,具备类、接口和继承等特性,并且提供了闭包(Closure)这一强大的功能,使得函数式编程成为可能。Groovy的语法简洁,比如它允许一行内定义方法,可以省略分号,甚至可以使用更自然的语言风格...