JetBrains 於 7 月 2 日正式發布了 Kotlin 2.4.20-Beta2,這一多平台編程語言的更新版本帶來了從 Wasmtime 運行時支持到 JavaScript 函數增強,再到 Swift 互操作改進等一系列新能力。
Wasm 與 WASI 支持增強
此次更新調整了 Kotlin/Wasm 處理 @JsFun 聲明中頂層 require() 調用的方式,並將伴生對象的初始化順序與 JVM 行為對齊。Kotlin/Wasm 現在會在子類伴生對象之前初始化超類伴生對象,與 JVM 的行為保持一致——此前的順序可能相反,導致跨平台行為不一致。此外,Kotlin Gradle 插件中的 wasmWasi 目標現已支持將 Wasmtime 作為運行時環境。
Swift 跨語言繼承支持
Kotlin 2.4.20-Beta2 在 Swift 導出中引入了跨語言繼承支持。該功能的一個典型應用場景是"反嚮導入"模式:開發者在 Kotlin 端定義接口契約,再在 Swift 端提供平台特定的實現,從而實現更靈活的跨語言協作。
Kotlin/JS 異步函數導出
在 Kotlin/JS 方面,本次更新引入了用於瀏覽器測試的實驗性 DSL,並支持將掛起 Lambda 導出為 JavaScript 異步函數。此前,Kotlin/JS 庫無法導出包含掛起 Lambda 的聲明。現在,Kotlin 編譯器可自動處理 Kotlin 掛起函數與 JavaScript 原生 async/await 模型之間的橋接轉換。JetBrains 表示,這對 Kotlin 與 TypeScript 混合代碼庫尤為實用。
協程棧跟蹤恢復支持
Kotlin 2.4.20-Beta2 引入了對協程棧跟蹤恢復的支持,標準庫中新增了 StackTraceRecoverable 接口。該功能目前處於實驗階段,旨在改善與 kotlinx.coroutines 庫的集成體驗。開發者無需添加對 kotlinx.coroutines 的依賴,即可為棧跟蹤恢復創建新的異常實例。當一個協程拋出異常、另一個協程重新拋出該異常時,棧跟蹤恢復功能可幫助開發者清晰地看到異常的起源位置以及被重新拋出的位置,大幅提升調試效率。
集合元素相等性與唯一性檢查
本次更新還以實驗性功能的形式引入了四個新函數,用於檢查集合元素的相等性與唯一性,分別為 .allDistinct()、.allDistinctBy()、.allEqual() 和 .allEqualBy()。這四個函數可用於集合、序列和數組,並與其他集合操作一樣採用結構相等性進行比較。JetBrains 表示,在此之前,檢查集合元素是否全部不同或全部相等需要使用低效的代碼模式。
Kotlin 編譯器原生鏡像首發
Kotlin 2.4.20-Beta2 還首次發布了 Kotlin 編譯器原生鏡像。該原生鏡像可作為標準 kotlinc 命令行工具的直接替代品,同時提供更快的啟動速度和更高的運行性能。這一特性目前同樣處於實驗階段。
Q&A
Q1:Kotlin 2.4.20-Beta2 中的協程棧跟蹤恢復功能有什麼用?
A:協程棧跟蹤恢復功能通過在標準庫中新增 StackTraceRecoverable 接口,幫助開發者在調試時更清楚地了解異常的來源。當一個協程拋出異常、另一個協程將其重新拋出時,開發者可以同時看到異常的起始位置和被重新拋出的位置。該功能無需依賴 kotlinx.coroutines 庫即可使用,目前處於實驗階段。
Q2:Kotlin/JS 新增的掛起 Lambda 導出功能解決了什麼問題?
A:此前,Kotlin/JS 庫無法導出包含掛起 Lambda 的聲明,限制了 Kotlin 與 JavaScript/TypeScript 的互操作能力。Kotlin 2.4.20-Beta2 新增了對掛起 Lambda 導出為 JavaScript 異步函數的支持,編譯器會自動處理 Kotlin 掛起函數與 JavaScript 原生 async/await 模型之間的橋接,對 Kotlin 與 TypeScript 混合代碼庫尤為適用。
Q3:Kotlin 編譯器原生鏡像和標準 kotlinc 工具有什麼區別?
A:Kotlin 編譯器原生鏡像是標準 kotlinc 命令行工具的直接替代品,主要優勢在於更快的啟動速度和更高的運行性能。開發者無需修改現有工作流即可切換使用,但該功能目前仍處於實驗階段,尚未正式穩定發布。






