2018年Java展望
jopen 7年前
<p><a href="/misc/goto?guid=4958993268727801487" title="Java"><img alt="2018年Java展望" src="https://simg.open-open.com/show/80aef14f07f1d8e160504c27cd780c7d.gif" /></a></p> <p>英文原文: <a href="/misc/goto?guid=4959012278118016097">Looking Forward to Java in 2018</a></p> <p>在 2017 年即将结束之际,让我们展望一下 2018 年的 Java 平台。</p> <p>伴随我们进入 2018 年的是,过去一年在 Java 世界中发生了前所未有的更多变化。其部分原因在于 <a href="/misc/goto?guid=4959012278224069469">Java 9 的推出</a>,尽管推后了近一年的时间。</p> <p>然而,随着时间的推移人们可能会发现,推出 Java 9 版本的意义,远没有随该新版本一并推出的 <a href="/misc/goto?guid=4959010739712671116">Java 版本发布周期变更为每六个月一次</a>的意义更为重大。Java 版本发布周期的变更,意味着在 2018 年将会推出两个 Java 新版本,而非一个。</p> <p>2018 年将推出的第一个新版本称为 Java 10,第二个新版本是 Java 11。虽然这一命名方案与现有命名看上去毫无二致,但是新版本只有经过<a href="/misc/goto?guid=4959012278343255282">重大公开辩论</a>并达成最终共识后,才能得以推出。</p> <p>鉴于新版本的推出将切换到这样一种严格按时间点的节奏,预计这将使每个新版本中发布的 Java 特性,比迄今为止所能看到的范围更为缩减。就 Java 10 而言,这意味着新特征的数量将相当之少。</p> <p><a href="/misc/goto?guid=4959012278430775352">InfoQ 先前曾报道了 Java 10 中的主要特性</a>。此后,该版本中添加特性的仅是一些细微的(<a href="/misc/goto?guid=4959012278529771890">Additional Unicode Extensions</a>)、清理性质的(<a href="/misc/goto?guid=4959012278633049718">移除了原生的头部生成工具</a>,<a href="/misc/goto?guid=4959012278730033386">提供默认的 CA 根证书</a>)、实验性质的(基于 Java 的 JIT 编译器 <a href="/misc/goto?guid=4959012278820267902">Graal</a>),或是当前为利基性质的(<a href="/misc/goto?guid=4959012278913530369">对异构内存架构的支持</a>)。</p> <p>至于 Java 11 中考虑了哪些功能,目前更是云山雾罩。我们只能确认下列几个功能在考虑范围内:</p> <ul> <li><a href="/misc/goto?guid=4959012278999261615">Epsilon</a>。一种对 Null 垃圾回收算法的参考实现。</li> <li><a href="/misc/goto?guid=4959012279095482967">Dynamic Class File Constants</a> 。一种主要针对软件库编写人员及使用动态特性<code>invokedynamic</code>高级开发人员的平台特性。</li> <li><a href="/misc/goto?guid=4959012279184067886">运行时追踪 JIT 编译事件</a>。</li> </ul> <p>一旦发布日期临近,该特性列表肯定会被填满。但是值得注意的是,列表中目前尚未提及 <a href="/misc/goto?guid=4959012279287846601">Java 值类型</a>。这也许并不出乎意料,因为实现值类型需要对 Java 语言和运行时做重大更改,并对 Java 类型系统(包括泛型)做完全重构。</p> <p>尽管<a href="/misc/goto?guid=4959012279377024483">当前原型</a>已工作,但是距特性交付尚有很长的路要走。<a href="/misc/goto?guid=4959012279468454891">当前状态</a>只适用于低级别的平台开发人员,以及那些习惯于使用基于反射(reflective)或 MethodHandle 工具的开发人员。看上去令人不可思议的是,尽管值类型将作为 Java 11 的一部分发布,但是 Oracle 依然尚未对该特性预期于何时发布公开发表任何评论。</p> <p>但是,如果值类型并未作为 Java 11 的一部分提供,这将会产生连锁反应。包含值类型的首个长期支持(LTS)版本将不会在 2021 年 9 月前发布。</p> <p>在撰写本文时,我们尚不清楚已在提案中的数据类(<a href="/misc/goto?guid=4959012279565508971">data classes</a>)特性是否会出现在 Java 11 中。正如 Java 语言架构师 Brian Goetz 所介绍的:</p> <blockquote> <p>数据类将用于解决类的表示与 API 合约间存在的复杂间接关系。通过使用数据类,编译器可以填入一些常规类成员。</p> </blockquote> <p>数据类提案与 Scala 的 Case 类具有一些相似之处。但是 Goetz 明确指出,数据类的设计空间中还存在一些可能的变动,该特性的整体语义含义要比目前我们能看到的更为深入。目前的数据类概念是与同处于开发过程中的<a href="/misc/goto?guid=4959012279654634537">模式匹配</a>特性深度关联在一起的。但是,这两个特性可能会在不同的版本中提供。</p> <p>与上面两个特性都相关的是,未来可能对 <a href="/misc/goto?guid=4959012279739146088">Switch 形式做改进</a>。Switch 语句块将可作为表达式或声明使用。</p> <p>该特性相对较小,有望在 Java 11 中交付,即便数据类或模式匹配特性尚未实现。但目前情况看,该特性仍然是一个 JEP 草案。</p> <p>最终将于 9 月发布的版本,其特性完成日期是 2018 年 6 月。因此,在 Java 11 的整体形态浮出水面之前,我们必须再等待数月时间。</p> <p>来自: <a href="/misc/goto?guid=4959012279843112444" id="link_source2">InfoQ</a></p>