歡迎新版本計劃表的第一個功能版本 —— Kotlin 1.5.0 !
這個版本提供了穩定的語言特性,如 JVM records,密封介面,內聯值類,幷包括了新的預設的 JVM IR 編譯器。 您在 Kotlin 1.4.30 和 Kotlin 1.5.0 EAP 版本中預覽特性的反饋切實幫助我們去穩定這些功能。 我們非常感激您的協助! 謝謝!
已經有多達 25,000 名開發者嘗試過 IntelliJ IDEA 上新的 JVM IR 編譯器了。
您會逐漸留意到其優勢。 新的編譯器與 Kotlin/Native 和 Kotlin/JS IR 編譯器共享標準統一的管道和業務邏輯,這將使我們能夠同時為所有平臺實現大多數特性,最佳化和錯誤修復。 它還將允許新增在所有平臺上自動執行的自定義處理和轉換。
您對於 Kotlin 1.5.0 還有什麼疑問? 在 5 月 25 日的 Kotlin 線上活動,Roman Elizarov, Svetlana Isakova,以及其他 Kotlin 團隊的成員,已準備就緒回答您的問題。
在這篇博文中,您將會看到以下內容的概述:
- 穩定的語言特性 —— JVM 記錄(records),密封介面和內聯值類。
- 標準庫和測試庫的改進,包括穩定的無符號整數型別,
java.nio.file.Path
的擴充套件以及 String,Char 和 Duration API 的改進。 - Kotlin/JVM的改進,包括新的預設 JVM IR 編譯器。
- Kotlin/Native 改進,包括針對除錯 Linux 和 iOS 應用程式更快速的編譯速度。
- Kotlin/JS 改進,包括已遷移了更多 JS 庫到新的 Kotlin/JS IR 編譯器。
自動升級到 Kotlin 1.5.0
如果您使用的是 IntelliJ IDEA 或 Android Studio,您可以透過它提供的選項,當 Kotlin 的新版已就緒,將自動升級到最新的版本。
瞭解更多有關 Kotlin 1.5.0 安裝的資訊。
穩定的語言特性
Kotlin 1.5.0 包含了在 1.4.30 中提供預覽的新語言特性的穩定版本:
- 對 JVM records 的支援以及保持和 Java 最新特性—— record 類的互操作性。 要將 Kotlin 類編譯為 Java 程式碼中的 record,將其宣告為
data
類,並透過@JvmRecord
註解標記:@JvmRecord data class User(val name: String, val age: Int)瞭解使用 JVM records 所需條件的更多資訊。 - 密封介面
sealed
修飾符在介面與在類上的原理相同——密封介面的所有實現在編譯時均為已知狀態。
- 密封類的改進 以前,所有子類都必須與密封類放在同一個檔案中。 現在它們可以位於相同編譯單元和相同程式包的任意檔案中。
- 內聯類是隻包含值為基礎型別的類的子集。 您可以用它們為某個指定型別的值進行封裝,而不會因為記憶體分配而產生額外的開銷。 透過
value
修飾符進行宣告。
瞭解更多有關 Kotlin 1.5.0 語言特性的資訊
標準庫及測試庫的改進
無符號整數型別的新穩定API是最令人期待的 Kotlin 1.5.0 庫改進,這是根據我們在 Kotlin 1.5.0-RC 博文中調查所得的結果。
標準庫提供了許多有用的功能,包括:
- 用於無符號整數型別的新穩定 API,以及它們的範圍,級數和函式。 瞭解更多有關無符號整型的資訊。
- java.nio.file.Path 的擴充套件函式,以 Kotlin 慣用風格呼叫的現代非阻塞 Java IO。
- String 和 Char API 的改進,包括用於更改字串和字元大小寫的新的與語言環境無關的 API,用於在字元及其整數程式碼和數值之間進行轉換的一組新函式,以及更多相容多平臺的 char 函式。
- Duration API 變動,包括內部使用
Long
值表示,並提供新的屬性以獲取 duration 的Long
值。
測試庫帶來了一系列重要的改進:
- 只需要在多平臺專案的公共源集裡對
kotlin-test
進行單次依賴。 - 當您指定唯一的
kotlin-test
依賴項時,會自動為 Kotlin/JVM 源集選擇測試框架。 - 大量斷言函式的更新。
瞭解更多有關庫改善的資訊。
Kotlin/JVM
Kotlin 1.5.0 帶來了:
- 在 Kotlin 1.4.0 宣佈的新 JVM IR 編譯器已穩定,併成為預設項。 在博文和文件中瞭解更多有關新編譯器的資訊。
- SAM adapters 和 lambda 將編譯為動態呼叫 (invokedynamic),這得益於最新的 JVM 特性。 Kotlin plain lambdas 的編譯是實驗性的。
- 新的預設 JVM target: 1.8。 而
1.6
target 已被棄用。 - 改進了對於 Java 中型別可空性資訊的處理方式。
- 棄用 @JvmDefault 和舊的 Xjvm-default 模式。
Kotlin/Native
Kotlin 1.5.0 提供了:
- 在
linuxX64
和iosArm64
目標的除錯模式下支援編譯器快取。 當編譯器快取啟用,除第一次除錯編譯外,大部分除錯編譯的速度都將更快。 測量結果表明,我們測試專案的編譯速度提高了200%。 - 停用內建的記憶體洩漏檢查器,以避免可能導致的應用程式崩潰問題。 瞭解如何啟用記憶體洩漏檢查器(如有必要)。
Kotlin/JS
Kotlin/JS 的 新 Kotlin/JS IR 編譯器邁向 Beta 。 許多著名的框架和庫 KVision,fritz2,doodle 等等已向 IR 編譯器敞開懷抱。
如果您是庫的作者,則可以透過向後相容性庫遷移來新增您的庫。
另一個額外的改進是透過 webpack 5 而非 webpack 4 來構建 JS bundle 包。
如何安裝 Kotlin 1.5.0
如果您使用的是 IntelliJ IDEA 或 Android Studio,它會建議在版本釋出後自動更新 Kotlin 到 1.5.0。 您也可以按照說明手動更新。
您仍然可以下載這些 IDE 的最新版本以保證對 Kotlin 的全面支援:
- 用於為不同平臺開發 Kotlin 應用程式的 IntelliJ IDEA。
- 用於開發 Android 和跨平臺的移動應用程式的 Android Studio。
確保您已將 kotlinx 庫更新到相容版本,並在現有專案的構建指令碼中指定 Kotlin 版本為 1.5.0
。
如果需要命令列編譯器,請在 GitHub 版本頁面下載。
如果遇到任何問題
Kotlin 1.5 線上活動
參加 5 月 25 日的 Kotlin 1.5 線上活動,Kotlin 團隊將回答您對最新版本的所有問題。 您可以詢問任何想知道的事情,或者您沒有任何問題,只對回答感興趣,那也不錯。 活動將持續1.5小時。
透過 #kotlin15ask
在 Twitter 上釋出您的問題,或在表格中新增你的問題。
我們還將於 5 月 27 日至 28 日在 Reddit 上進行 “Ask Me Anything”(AMA) 討論,以處理所有未解決的問題,同時也會回答新問題。
相容性
與所有主要版本一樣,某些先前宣佈的變更的棄用週期將在 Kotlin 1.5.0 版本結束。 所有這些情況都經過了語言委員會的仔細審查,並在 Kotlin 1.5 相容性指南中列出。 您也可以在 YouTrack 上瀏覽這些變更。
更多的觀看及閱讀材料
觀看Kotlin YouTube:
- Kotlin 1.5.0 影片播放列表
- 訂閱 Kotlin YouTube,避免錯過有關協程和序列化庫新改進的影片。
閱讀 Kotlin 部落格:
透過 Kotlin 文件瞭解更多資訊:
外部貢獻者
我們要感謝???所有外部貢獻者,此版本中包含了他們的 Pull Request:
Jinseong Jeon, Mads Ager, Ivan Gavrilovic, pyos, Steven Schäfer, Iaroslav Postovalov, scaventz, Kristoffer Andersen, Bingran, Stefan Wolf, Victor Turansky, fjjohnchen, justin.wei, Nelson Osacky, Mikhail Galanin, Michael Hoisie, Kris Hall, Kevin Bierhoff, Jiaxiang Chen, Hung Nguyen, Cedric Champeau.
YouTrack 的最佳問題報告者
我們要感謝???社群的所有成員,他們透過向 YouTrack 報告問題幫助我們改進了此版本! 我們列出了前 20 名報告者,在此向他們致以衷心感謝:
Morgan Bartholomew (118 個問題); Marc Knaup (78 個問題); Ryan Nett (61 個問題); Louis CAD (48 個問題); Daniil Stepanov (44 個問題); AndroidDeveloperLB (39 個問題); Victor Turansky (38 個問題); Jinseong Jeon (35 個問題); Zac Sweers (25 個問題); Łukasz Wasylkowski (22 個問題); Tianyi Guan (21 個問題); Christoph Sturm (20 個問題); Axel Fontaine (19 個問題); Alexander Nozik (18 個問題); Robert Stoll (18 個問題); Björn Kautler (18 個問題); Róbert Papp (14 個問題); Andreas Malik (14 個問題); Lorenzo Neumann (14 個問題); Iaroslav Postovalov (14 個問題).