編程語言 Kotlin 2.0.0 現已發布,K2 編譯器進入穩定狀態
5 月 22 日消息,JetBrains 官方宣布 Kotlin 2.0.0 正式發布,其代碼已上傳到 GitHub 庫。
Kotlin 2.0 亮點
K2 編譯器現已進入穩定狀態:
默認用于所有平臺(JVM、Native、Wasm 和 JS),且性能顯著提升。性能方面,JetBrains 團隊編譯了 1000 萬行代碼以確保其質量穩定,涉及 18,000 多名開發人員和 80,000 多個項目。
IDE 支持:
新版 Kotlin 插件已集成在 IntelliJ IDEA 和 Android Studio 中。
新 Compose 編譯器已集成 Gradle 插件:
從 Kotlin 2.0.0 開始,org.gradle.jvm.environmentGradle 屬性默認會與 Kotlin 版本一同公布,從而更好地區分 Kotlin 多平臺庫的 JVM 和 Android 版本。
Kotlinx-metadata-jvm 庫:
kotlinx-metadata-jvm 庫現已進入穩定狀態
Lambda 函數:
Kotlin 2.0.0 引入了一種使用生成 lambda 函數的新默認方法“invokedynamic”,可生成更小的二進制文件。
使用 Apple 平臺上的標記(signposts)監控 Kotlin / Native 中的 GC 性能:
以前,開發者只能通過查看日志來監控 Kotlin / Native 的垃圾回收器 (GC) 的性能。然而,這些日志并未集成到 Xcode Instruments 中(后者是一款用于調試 iOS 應用性能問題的工具包)。從 Kotlin 2.0.0 開始,GC 會通過 Instruments 中提供的特殊標記來報告暫停,從而允許在應用程序內進行自定義日志記錄。
使用 Objective-C 方法解決 Kotlin / Native 中的沖突:
Objective-C 方法可以用不同的名稱,但必須具有相同的數量和類型參數。例如,locationManager:didEnterRegion: 和 locationManager:didExitRegion:。在 Kotlin 中,它們都具有相同的簽名,因此嘗試使用時也會觸發沖突重載報錯。
放在以前,開發者必須手動解決沖突才能避免此編譯錯誤,而為了改善 Kotlin 與 Objective-C 的互操作性,Kotlin 2.0.0 引入了新的 @ObjCSignatureOverride 注釋。該注釋會指示 Kotlin 編譯器忽略沖突的重載,以防從 Objective-C 類繼承多個具有相同參數類型但參數名稱不同的函數。
支持 Kotlin / Wasm 中的命名導出:
支持命名導出和無符號原始類型的 @JsExport 函數,從而提高了可讀性,并幫助開發者更好地管理模塊之間的依賴關系,還能使 Kotlin 和 JavaScript 模塊之間的代碼共享更容易。
此外, Kotlin 2.0.0 還支持生成 Kotlin / Wasm 中 TypeScript 聲明文件(IT之家注:實驗性功能,可能會隨時被刪),能夠根據 @JsExport Kotlin 代碼中的聲明生成 TypeScript 定義,從而讓 IDE 和 JavaScript 工具使用這些定義來提供代碼自動補完功能。
默認使用 Binaryen 優化生產版本:
Kotlin / Wasm 工具鏈現在會在生產編譯過程中對所有項目默認應用 Binaryen 工具,而無需進行手動設置。官方估計,這將進一步改善項目的運行時性能并減小二進制文件大小。當然,此更改僅影響生產編譯。開發編譯過程保持不變。
用于多平臺項目中編譯器選項的新 Gradle DSL 實驗性功能(可能隨時被刪):
Kotlin 2.0.0 引入了全新的 Gradle DSL,可用于在多平臺項目中更輕松地配置編譯選項。此前在 Kotlin 中使用 Gradle 配置編譯選項只能針對較低的層面,例如單個任務、編譯過程或源代碼集。有了這個新的 Gradle DSL,您就可以直接設置全局配置編譯選項。
替換枚舉類值泛型函數的穩定方式
在 Kotlin 2.0.0 中,訪問枚舉類值的方式變得更加穩定。Kotlin 2.0.0 引入了新的專門用于枚舉的穩定函數 enumEntries<T>(),可返回給定枚舉類型 T 的所有枚舉條目列表。
Kotlin 之前還引入了一個枚舉類的屬性 entries,目前已經進入穩定狀態并將與上述函數一起替代“不再推薦使用”的 values ()。
穩定的 AutoCloseable 接口
自 Kotlin 2.0.0 開始,開發者常用的 AutoCloseable 接口宣布進入穩定狀態,它可以允許開發者輕松關閉資源,并包含兩種有用的函數:
- use () 擴展函數,用于在選定的資源上執行給定的塊函數,并保證能夠在無論是否拋出異常的狀態下都能正確關閉相關資源。
- AutoCloseable () 構造函數,用于創建 AutoCloseable 接口的實例。