Java並未走遠,未來已來
在上一次 JavaOne 大會之後,首屆 Oracle CodeOne 大會最近於美國舊金山舉行。週一晚上主旨演講的頭條是“Java:未來已來(The Future of Java Is Today)”,其中包括:新的每半年釋出一次的 Java/JDK 的釋出節奏正按計劃進行;Oracle 和許多其他組織將繼續支援 Java 併為之做出貢獻;有幾個新的 OpenJDK 專案在探索提高生產力的語言功能,比如,原始字串字面量(raw String literals)、纖程(fiber)和 Continuation、外部函式和資料介面。
在 Java 平臺團隊軟體開發副總裁 Georges Saab 簡短的歡迎致辭後,第一個上臺演講的是 GitHub 的現場維護和支援服務(Field Services)副總裁 Matthew McCullough。他強調了 Java 平臺的開源參考實現 OpenJDK 的重要性,並討論了“Skara 專案”,該專案是官方 OpenJDK 上游 Mercurial 儲存庫基於 GitHub 原型的映象。
Skara 專案旨在研究用於 JDK 原始碼的原始碼管理和程式碼審查的備選項。McCullough 還談到,大多數“有重大影響力的軟體”都是全球協作開發的,並鼓勵觀眾參與開源軟體專案。為更好地說明這一目標,他還簡單演示了幾個 GitHub 的新功能。
值得一提的是,Skara 專案還處在早期階段,目前是獨立的,但和社群驅動的 AdoptOpenJDK 專案鬆散地保持一致。AdoptOpenJDK 專案也是上游 OpenJDK 儲存庫的映象,並提供所有最新的和未來的 JDK 版本的構建,目標是為 Java(包括最近釋出的 Java 11)的長期支援(Long Term Support,簡稱 LTS)版本提供四年的構建和最好的社群支援。為 AdoptOpenJDK 專案提供商業支援的有 IBM、Azul Systems,LJC、微軟、Ocado Technology 和 Packet。
Saab 重回臺上後,討論了“保留 Java 優點”的相關話題。Java 將繼續免費和開源,社群致力於提供平臺的完整性,並投資於開發人員生產力和相容性。在質量和安全上也持續地進行投入,並保持開放和透明的發展。
講到 Oracle 的貢獻時,Saab 展示了最近開源的幾個之前是商業 Java 平臺的功能:在 Java 10 中有應用類資料共享(Application Class Data Sharing,簡稱 ACDS);在 Java 11 中有ZGC 專案(用於幾千兆堆的低延遲 GC)、飛行記錄器和任務控制(用於診斷和監控)。
新的每半年一次的釋出計劃已經成功交付,它為 Java 平臺提供逐步改進,並使開發人員能夠更快地訪問到新功能,“不再有破壞性的主要版本”(如果計劃的功能錯過了釋出截止日期,那麼就放到下一次的釋出)。Saab 簡單提了提新的 LTS 版本和 Oracle 支援模式,關於這些,在社群內目前存在很多困惑(InfoQ 最近報道了與該主題相關的“Java 還是免費的”Java Champion 宣告)。
該主旨演講部分的結尾,是向 OpenJDK 社群中很多貢獻者的致謝感言,同時也提到了幾個 Oracle 資助的 Java 社群支援專案,包括Java Magazine、Java User Groups、Java Champions、jDuchess 專案、Oracle Academy Student Outreach以及Java Community Process(簡稱 JCP)。
接下來演講的是 Oracle 的 Java 平臺團隊首席架構師 Mark Reinhold。演講一開始,他先提醒聽眾,遷移到新的 Java 模組系統(JEP 261)是個非常大的挑戰,因為需要重寫大量內部元件。但是,自從 Java 9 中釋出該功能以來,應用效果一直不錯,並且開始實現了收益。Reinhold 鼓勵每個 Java 開發人員都看看這個新功能,並給大家推薦了幾本入門書。
新的模組化架構改進了平臺釋出節奏,並回應了 Saab 早先的評論,Reinhold 提到了 Java 10 和 Java 11 成功地按時交付,也提到了 LTS 釋出會帶來的影響(主要是跟 Oracle 提供的商業支援有關,儘管其他供應商和 AdoptOpenJDK 計劃也提供替代的構建和社群驅動以及商業支援模組)。
該部分主旨演講的核心資訊是“Java 仍然免費”,OracleJDK 和 OpenJDK 構建非常類似(尤其是首個每半年一次的 LTS 釋出,儘管構建可能在此日期後會出現分歧,這取決於會發布什麼安全性和錯誤補丁到上游 OpenJDK 儲存庫)。Reinhold 提到了“關於新發布模型的五大誤解”,其中包括錯誤地認為,非 LTS 釋出是實驗性的,如果維護的是不經常遷移的系統,那麼可以忽略非 LTS 的釋出。
他還討論了用最新的 Java 版本測試開源專案的社群工作,提到了兩個推特標籤:#WorksFineOnJDK9 和 #WorksLikeHeavenOnJDK11。強烈建議所有在使用 Java 9 或更高版本的開發人員升級到最新的版本,包括所有在使用的工具和依賴項。
接著,Reinhold 換了一個話題,開始展望未來。目前,Java 12 / JDK 12 有 4 個與之相關的 JEP(到目前為止),包括(啟用命令列標誌)新switch 表示式的預覽和原始字串字面量,以及“一個 AArch64 埠,而非兩個”和預設的 CDS 存檔。“面對程式設計範例、應用領域、部署風格和硬體的不斷髮展”,幾個未來功能的重點放在了開發人員的生產力和程式效能上。
該主旨演講的最後部分重點介紹了 4 個 OpenJDK 的新專案。
Amber:“調整語言儀式的大小”,包括區域性變數型別推斷、無需轉義排序的原始字串字面量。
Loom:“Continuations 和纖程”,包括刪除舊的“無意義”或與執行緒有關的不良 API 方法,新增纖程,即“由 Java 虛擬機器管理的輕量級高效執行緒、讓開發人員能夠使用同樣簡單的抽象,但具有更好的效能和佔用更小的空間”。
Panama:非 Java 外部函式和資料介面,包括從 JVM(C、C++)呼叫本機函式和從 JVM 或 JVM 堆訪問本機資料
Valhalla:Value 型別和專用的泛型。
Reinhold 展示了一系列實時編碼演示,用的是最新(未釋出)Java 12 build,其中的示例可以從以上鍊接的各個專案網站上找到。
社群對該 Java 主題演講的反應總體上是積極的,Paul Bakker 表示“CodeOne!上的主旨演講很棒,Java 生態系統看起來比以往更好。”Chris Hegerty 評論道:“CodeOne!上的主旨演講很棒,尤其是 Mark Reinhold 講解技術的那部分”。