首页
学习
活动
专区
圈层
工具
发布

Kotlin 2.4.20-Beta2 发布:支持协程栈跟踪恢复及多项实验性新特性

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 命令行工具的直接替代品,主要优势在于更快的启动速度和更高的运行性能。开发者无需修改现有工作流即可切换使用,但该功能目前仍处于实验阶段,尚未正式稳定发布。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Ovjo1TTdxopVoFwele5kXLrg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券