K2 编译器将在 Kotlin 2.0 中进入稳定状态 | 官方博客

2023-02-28 16:32:10 浏览数 (1)

我们一直在为 Kotlin 编译器(代号 K2)开发新的前端。前端是编译器的一部分,负责解析代码和执行语义分析、数据流分析、调用解析和类型推断。这是开发者与编译器交互最多的部分。编译器也通过它在 IDE 中持续运行、报告所有错误和警告消息,帮助完成自动补全、语义感知检查、意图和重构等任务。新前端已经可供预览 – 我们将继续进行完善和稳定工作,计划在未来 Kotlin 版本中将其设为默认编译器前端。我们已经决定将这个未来版本命名为 Kotlin 2.0。下文将详细描述 Kotlin 2.0 版本的路线图、我们的动力以及对它的期望。

Kotlin 2.0 发布路线图是什么?

我们计划再发布一个按照传统方式进行版本控制的版本,Kotlin 1.9,其中还将包括来自 K2 编译器前端的持续开发的更新,因为它已经接近稳定。未来不会有 Kotlin 1.10。Kotlin 1.9 后的下一个主要版本将是 Kotlin 2.0。

为什么选择 Kotlin 2.0?

前端是编译器的主要部分。K2 编译器前端不仅仅是对旧编译器前端的重构,而是基于新架构从头开始的完全重写。我们一直在各种博客、视频和会议演讲中发布有关差异的技术细节。如需了解详情,可以从K2 编译器之路开始。简而言之,新架构在设计上更快、更可扩展,解决了旧编译器前端的技术债务,修正了各个位置的错误和极端情况,并为语言的未来扩展铺平了道路。

对于编程语言,主要版本通常在引入主要功能或破坏性更改时递增。不过,对于软件程序,即使功能集基本保持不变,只要有内容被大幅重写,表明大规模重做,就可以增大主要版本。虽然 Kotlin 是一种语言,但我们还是决定遵循这一软件做法。首先,Kotlin 编译器是一个大型软件。Kotlin 语言的版本由其编译器的版本定义。我们确实提供了 Kotlin 规范作为语言的参考,但不是它的定义。

  • Kotlin 规范: https://kotlinlang.org/spec/introduction.html

它会破坏我的代码吗?

Kotlin 随着每个语言版本的更新而变化。有新的语言功能添加进来,旧的错误会得到修正。我们始终在尽量减少破坏性更改的数量和影响,并遵循 Kotlin 语言的演变流程。Kotlin 2.0 在这方面不会有任何不同。

  • Kotlin 语言的演变流程: https://kotlinlang.org/docs/kotlin-evolution.html

我们有意识地避免在 Kotlin 2.0 中引入任何新功能。Kotlin 编译器前端的重写是一个相当大的变化,本身就引入了许多改进。其一,新的数据流分析算法比先前更精确并能带来更好的智能转换 – 查看这些问题以及具体示例。这会将无法在 Kotlin 1.9 旧前端编译的红色代码变成可在 Kotlin 2.0 中编译的绿色代码。从技术上讲,这是新 Kotlin 语言功能的特别之处。不过,它只是新编译器架构的副作用。

  • 这些问题: KT-4113 | KT-1982 | KT-28806 | KT-7186

此外,大量长期存在的错误已得到修正,并且,其中一些修正可能难免会破坏意外依赖于错误编译器行为的代码。我们正在仔细研究新旧 K2 前端之间所有行为变化的影响,如果更改可能会影响相当数量的 Kotlin 用户,我们就算不喜欢,也仍然会尽可能复制旧行为。

我们会尽全力将代码从 Kotlin 1.9 迁移到 Kotlin 2.0 的影响降到最低。我们将及时发布 Kotlin 2.0 稳定过程的最新信息,并让您有充足时间提前在项目中试用 Kotlin 2.0,以便您可以报告我们在测试中可能遗漏的任何回归。我们目前的工作重点是今年晚些时候 K2 编译器前端的测试版质量版本,您可以在这个路线图问题中查看进度。

  • 这个路线图问题: https://youtrack.jetbrains.com/issue/KT-52604

IDE 对 Kotlin 2.0 的支持如何?

Kotlin IDE 插件捆绑在 IntelliJ IDEA 和 Android Studio 更新中。它包括用于对代码进行语义分析的 Kotlin 编译器前端的副本,但这不是用于实际编译代码的 Kotlin 编译器版本 – 编译器的实际版本由构建文件中的设置决定。因此,通过 Kotlin 语言版本 2.0 编译代码时,您将使用新的编译器前端并获得新编译器架构的所有性能优势。但是,IDE 仍可能使用旧前端检查代码。

为了在 IDE 中为您提供新编译器前端的性能优势,我们正在编写一个全新版本的 Kotlin IDE 插件,它以 K2 编译器前端为基础构建。我们目前正在推进这个新 IDE 插件的公开预览。您可以关注这个问题了解动态。

  • 这个问题: https://youtrack.jetbrains.com/issue/KTIJ-23988

Kotlin 2.0 之后有什么计划?

Kotlin 2.0 编译器前端的新架构可以干净地实现许多精彩的新功能。其中一些功能,例如 KT-10468 上下文接收器,已经可以在旧编译器前端中供用户预览,但默认不会在 Kotlin 2.0 中启用。它们将停留在预览阶段。新功能将在未来的 Kotlin 2.x 版本中稳定,我们管道中的其他新功能也将同时实现。一如既往,我们将通过 Kotlin 路线图分享计划的定期动态。

  • Kotlin 路线图: https://kotlinlang.org/docs/roadmap.html

Kotlin 3.0 什么时候推出?我们还不知道。我们正在试探性地讨论未来语言的重大变化,特别是我们上一次 Kotlin功能调查中最受欢迎的请求。部分变化可能意义相当重大,足以带来新的主要 Kotlin 版本。

  • Kotlin 功能调查: https://blog.jetbrains.com/zh-hans/kotlin/2021/12/kotlin-features-survey-2021-results/

您可以如何提供帮助?

试用新的编译器前端,把您的想法告诉我们!从 Kotlin 1.8.20 开始,您可以通过常规 Kotlin 语言版本标志启用 Kotlin 2.0 语言版本的预览。

  • 启用 Kotlin K2 编译器 https://kotlinlang.org/docs/whatsnew-eap.html

了解详情

  • Kotlin 路线图: https://kotlinlang.org/docs/roadmap.html
  • K2 编译器之路
  • Kotlin 1.8.20-Beta 最新变化: https://kotlinlang.org/docs/whatsnew-eap.html

本博文英文原作者:Roman Elizarov

0 人点赞