技术开发 频道

JDK7的特性将要再一次推迟?

  【IT168 评论】在一篇题为《重新思考JDK7》的博文(以及jdk7-dev的跨站转贴)中,Mark Reinhold提出了将先前计划在JDK7中实现的某些特性推迟到JDK8的建议,以期JDK7的早日面世。该建议是好是坏?在社区里引起了广泛的讨论。

  当人们已经接受到JDK的推迟已经导致了早前声明的时间表的拖延(当然,这个时间表是无论如何也无法实现的)之后,目前讨论的焦点是是否要提前推出一个版本,还是等到万事俱备时才发布。Mark的建议是:

  就目前我们对“B计划”的评估来看,我们可以在2011年中期发布简化版的JDK7,然后在2012年下半年发布JDK8。

  总结如下:

  A计划:2012年中期发布JDK 7(按照目前的定义)

  B计划:2011年中期发布JDK 7(除去Lamba、Jigsaw和Coin的一部分)

  B计划:2012年后期发布JDK 8(Lambda、Jigsaw和剩下的Coin等)

  颇具讽刺的是,Mark的博客的副标题是“刻不容缓!”。然而,从对该博文的回复看,好几个回帖都认为早发布、频繁发布比一次性发布好。虽然人们更期望B计划中的某些特性,而对另外一些则差一些,但是毫无疑问,B计划中的Coin项目将对Java语言带来极大的好处。Joseph D. Darcy对Coin的特性澄清如下:

  二进制文字以及文字的下划线

  switch语句中的字符串

  <>操作附

  异常处理的改进

  简化varargs方法调用

  面向资源的try语句

  B计划还包含jsr166y类 (ForkJoin、TransferQueue、Phaser等)。此外,它还对JVM做了一些改进,如对动态调用的JSR292的支持将出现在JVM这一层。虽然对于静态类型的Java语言,它的用处似乎不大,但它可用来优化当前使用的Method.invoke()方法(当在RMI或其他企业服务器使用时)。如果这一特性还包含对MethodHandle的语言支持,那么在Java类中调用函数将方便很多,因为不再需要通过反射机制查找名称正确的消息(MethodHandle的底层使用invokedynamic,但需要更改JLS,所以B计划有可能包含invokedynamicVM指令和MethodHandle类,但不包含对文字的支持)。

  在JVM上实现其他语言的人们应该为该时间表的更改感到兴奋,因为invokedynamic可用的日期更早了,他们不再需要等到2012年了。(不过,两个计划都将Lambda等放到了2012年)。对于同时工作在基于JVM的JRuby上的Mirah的Charles Nutter,对于这一改变,他只能苦中寻乐:

  对我所做的工作而言,函数处理也许是即将到来的JDK7的最重要的特性之一。对于所有希望无需生成单个方法类就能描述函数或函数指针的JVM语言的人们而言,这无疑会成为关键的一部分(因为,当前所有的JVM语言必须要做这个工作,若不是在这里,就是在那里)。但是它们的推迟则意味这像JRuby这样的语言实现不得不依然要苦苦挣扎,构建前所未有的聪明的代码来生成策略才能躲过内存溢出(或避免吃掉过多的内存)。该特性发布的越早越好。

  所以,我该不该心甘情愿地放弃Jigsaw、Lambda和Coin呢?Jigsaw和Coin也许还能,即便它们一定会(JDK7中)缺失。而对于Lambda而言……如果它不能在短期内完成实际函数类型、整合函数处理与动态调用,它就应该等到这一切都完备了才发布出来。这么说,我是很难过的,但是我们的确有JVM上的其他语言可以完成那个闭包(closure),比如我自己的JRuby和Mirah(Mirah偶尔可以提供闭包[closure]甚至更多功能,而不需要任何运行时库或JVM的支持)。对我们而言,JVM的匿名内部类依然很棒(如果你看看JRuby的代码库……你会发现数以百计这样的应用)。

  对了,对于鼓吹Scala的人……请解释一下Scala如何解决B计划中可能缺失的那些特性。没错,它有自己的闭包(closure),但是它们不能与其他语言或正则Java代码进行互操作(除非你相应地限制你的设计),这样一来,除了Scala程序员,它们对于其他人它就没什么用处了。它们没有完成Jigsaw目标的能力。而且,(我相信)Scala所提供的大部分Coin的特性都已经提供了。Scala不会成为Java语言作为JVM的替代品,永远不可能。

0
相关文章