在2017年即將結束之際,讓我們展望一下2018年的Java平臺。
伴隨我們進入2018年的是,過去一年在Java世界中發生了前所未有的更多變化。其部分原因在于Java 9的推出,盡管推后了近一年的時間。
然而,隨著時間的推移人們可能會發現,推出Java 9版本的意義,遠沒有隨該新版本一并推出的Java版本發布周期變更為每六個月一次的意義更為重大。Java版本發布周期的變更,意味著在2018年將會推出兩個Java新版本,而非一個。
2018年將推出的第一個新版本稱為Java 10,第二個新版本是Java 11。雖然這一命名方案與現有命名看上去毫無二致,但是新版本只有經過重大公開辯論并達成最終共識后,才能得以推出。
鑒于新版本的推出將切換到這樣一種嚴格按時間點的節奏,預計這將使每個新版本中發布的Java特性,比迄今為止所能看到的范圍更為縮減。就Java 10而言,這意味著新特征的數量將相當之少。
InfoQ先前曾報道了Java 10中的主要特性。此后,該版本中添加特性的僅是一些細微的(Additional Unicode Extensions)、清理性質的(移除了原生的頭部生成工具,提供默認的CA根證書)、實驗性質的(基于Java的JIT編譯器Graal),或是當前為利基性質的(對異構內存架構的支持)。
至于Java 11中考慮了哪些功能,目前更是云山霧罩。我們只能確認下列幾個功能在考慮范圍內:
Epsilon。一種對Null垃圾回收算法的參考實現。Dynamic Class File Constants 。一種主要針對軟件庫編寫人員及使用動態特性invokedynamic高級開發人員的平臺特性。運行時追蹤JIT編譯事件。一旦發布日期臨近,該特性列表肯定會被填滿。但是值得注意的是,列表中目前尚未提及Java值類型。這也許并不出乎意料,因為實現值類型需要對Java語言和運行時做重大更改,并對Java類型系統(包括泛型)做完全重構。
盡管當前原型已工作,但是距特性交付尚有很長的路要走。當前狀態只適用于低級別的平臺開發人員,以及那些習慣于使用基于反射(reflective)或MethodHandle工具的開發人員??瓷先チ钊瞬豢伤甲h的是,盡管值類型將作為Java 11的一部分發布,但是Oracle依然尚未對該特性預期于何時發布公開發表任何評論。
但是,如果值類型并未作為Java 11的一部分提供,這將會產生連鎖反應。包含值類型的首個長期支持(LTS)版本將不會在2021年9月前發布。
在撰寫本文時,我們尚不清楚已在提案中的數據類(data classes)特性是否會出現在Java 11中。正如Java語言架構師Brian Goetz所介紹的:
數據類將用于解決類的表示與API合約間存在的復雜間接關系。通過使用數據類,編譯器可以填入一些常規類成員。
數據類提案與Scala的Case類具有一些相似之處。但是Goetz明確指出,數據類的設計空間中還存在一些可能的變動,該特性的整體語義含義要比目前我們能看到的更為深入。目前的數據類概念是與同處于開發過程中的模式匹配特性深度關聯在一起的。但是,這兩個特性可能會在不同的版本中提供。
與上面兩個特性都相關的是,未來可能對Switch形式做改進。Switch語句塊將可作為表達式或聲明使用。
該特性相對較小,有望在Java 11中交付,即便數據類或模式匹配特性尚未實現。但目前情況看,該特性仍然是一個JEP草案。
最終將于9月發布的版本,其特性完成日期是2018年6月。因此,在Java 11的整體形態浮出水面之前,我們必須再等待數月時間。
查看英文原文: Looking Forward to Java in 2018