InfoQ:很多人认为需要向Java中添加lambdas支持的一个主要原因在于Fork/Join的需要。但你们为何首先发布了Fork/Join?这不是表明在将lambdas添加进来前这个API都是有问题的么? 这纯粹是扯!我们通过多种发布途径帮助开发者编写并行应用。这起始于JDK 1.5,那时Doug Lea和他的JSR 166专家组添加了API层次支持以将应用分解为多个可以并行执行的任务。JDK 7中的Fork/Join框架是实现这个目标的另一种手段,但仍然提供了一套工具,当开发者了解该如何分解其编程任务时,他们就可以使用这些工具了。 我们要做的是尽可能将更多的设计与实现工作自动化以使应用能够并行运行。Project Lambda包含了lambda表达式,用于实现更加简洁的封装函数行为以及并行算法的平台实现,如过滤和映射等。他们可以通过现有的并行API实现,如 Fork/Join,但这只不过是实现的细节问题而已。Lambda有助于我们将并行程序设计带给大众,但我敢肯定总会有一些“强力”开发者使用Fork /Join提供的一些更加手工的技术。 InfoQ:有人提议说Java 8可能会定义自动的并行块数据操作,如过滤、映射和降级。能否谈谈呢? 这些块数据操作非常重要,因为他们可以通过内部遍历实现自动化的并行操作。这意味着现在不必再编写传统的循环来过滤集合(这是外部遍历),你只需在 lambda表达式中定义过滤器,然后将其传递给集合的filter方法即可,后者会在内部进行遍历操作。因为filter方法可以控制遍历实现的方式, 因此在可能的情况下它会将工作分离到多个处理器核心上执行,但这一切对于开发者来说都是透明的。 InfoQ:Java 7通过invokeDynamic首次向JVM引入了新的字节码指令。Project Coin中有一个相当不错的提案,建议在Java语法中增加invokeDynamic,但却被放弃了。能否介绍一下放弃它的背后原因么?它会在Java 8中重出江湖么? 在经过缜密透彻的分析后,我们认为通过一个只会被少数人所用的特性来扩展Java编程语言并没有什么意义。我也怀疑Java 8会重新考虑它。 InfoQ:关于对JVM上其他语言的支持,你认为有哪些语言会从进一步的VM级的改变中获益? 我们并没有为了这种支持而选择语言。我们所采取的方式是仔细观察除了Java以外,开发者还对哪些语言感兴趣。对VM进行额外的增强以改进JRuby、JavaScript、Scala及Clojure的性能是很有价值的,但他们只不过是大家能够看到的而已。 InfoQ:你认为接下来还会对语言支持进行哪些调整——continuations、tail-calls还是interface injection?Java 8会支持他们么? 现在说这些为时尚早。目前John Rose正与很多语言设计者和实现者通力合作,他们采取了很务实的方法来对这些特性建立原型,然后评估哪些特性会带来最大的价值。事实上,在上周举办的JVM语言峰会上有不少有意思的讨论,你可以在这里查看结果。 |