K2 编译器将在 Kotlin 2.0 中进入稳定状态

时间:2021-04-27 00:37:32
K2 编译器将在 Kotlin 2.0 中进入稳定状态


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

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


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


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


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



IDE 对 Kotlin 2.0 的支持如何?


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


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



Kotlin 2.0 之后有什么计划?


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


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



您可以如何提供帮助?


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


启用 Kotlin K2 编译器



了解详情



本博文英文原作者:Roman Elizarov

推荐观看

直播回放:2022 Kotlin 中文开发者大会

2022 年底,我们举办了 2022 Kotlin 中文开发者大会。为期两天的线上直播中,来自社区的10 多名技术专家和活跃开发者围绕 Coroutine、Compose Multiplatform、Kotlin Multiplatform Mobile、Kotlin Symbol Processor、Ktor 等热门话题带来了精彩纷呈的分享。如果你错过了现场直播,也欢迎至「JetBrains中国」B 站官方频道收看大会回放,重温活动的精华。


向上滑动阅览 2022 Kotlin 中文开发者大会演讲主题


  • 十分钟带您了解 Kotlin 的 2022

  • 《从 Jetpack Compose 到 Compose Multiplatform》

  • 《使用 DSL + KSP 打造跨平台的 Kotlin SQLite 框架》

  • 《Kotlin Symbol Processor 应用与技巧》

  • 《通过 Ktor 框架同步完成 Server 及 Client Side 开发》

  • 《享受用 Kotlin 刷 LeetCode 的乐趣》

  • 《Kotlin 很简单,一起来学习吧!》

  • 《在你的城市寻找 Kotlin 伙伴》

  • 《与时俱进:使用 Kotlin 尝鲜 Spring 6》

  • 《从零开始欣赏 Coroutine 的精湛设计》

  • 《使用 Vaadin 搭配 Kotlin 快速开发 Web 应用》

  • 《使用 Kotlin 编写 IntelliJ Plugin》

  • 《那些运营 Kotlin 社区的大小事》


进入播放列表

K2 编译器将在 Kotlin 2.0 中进入稳定状态

⏬ 戳「阅读原文」了解更多