1-Intro
Kotlin 2.0
- 拥有稳定的
K2编译器 - 从根本上支持多平台,
KMP支持ServerWebDesktopIOSAndriod上共享代码 - 编译速度 可能提高了快1倍
K2模式, 目前处于Alpha阶段.- 代码高亮显示速度提高了 1.8 倍
- 代码补全速度提高了 1.5 倍
- 开启K2 模式
- Kotlin 编译器同时在
IDE中作为代码分析引擎,K2主要用来提升IDE的一些体验
- 更智能的代码分析: ?
- 迁移的稳定性, 官方有一些数据.
- 测试超过了
1000W行的代码 - 是目前质量最高的版本
- 迁移指南
- 测试超过了
相关文章
- Kotlin 2.0.0 最新变化: https://kotlinlang.org/docs/whatsnew20.html
- K2 编译器迁移指南: https://kotlinlang.org/docs/k2-compiler-migration-guide.html
- K2 编译器之路: https://blog.jetbrains.com/zh-hans/kotlin/2021/10/the-road-to-the-k2-compiler/
- K2 编译器性能基准以及如何在项目中测量性能: https://blog.jetbrains.com/zh-hans/kotlin/2024/05/k2-compiler-performance-benchmarks-and-how-to-measure-them-on-your-projects/
- Android 支持 Kotlin Multiplatform 以在移动、Web、服务器和桌面平台之间共享业务逻辑: https://android-developers.googleblog.com/2024/05/android-support-for-kotlin-multiplatform-to-share-business-logic-across-mobile-web-server-desktop.html
- Jetpack Compose 编译器迁移到 Kotlin 仓库: https://android-developers.googleblog.com/2024/04/jetpack-compose-compiler-moving-to-kotlin-repository.html
2-Migration Guide
新的架构
3个组件
Frontend: 处理源代码的平台,把源代码翻译为中间表示,也就是所谓的IR, Intermediate Representation . 工作的简单描述如下:- 词法分析: 把源代码转换为
tokens, 编程的基本单位 - 语法分析:把
tokens组成AST, 也就是 抽象语法树 - 语义分析: 检查 语义正确性, 比如类型检查, 变量作用域
IR生成
- 词法分析: 把源代码转换为
IRIR Backend: 负责把中间表示翻译为 目标平台的机器码或者字节码,例如Server backend,Js backend… 等等,简单来说可能包含如下的内容:- 平台相关优化 (`Platform-specific Optimization): 对中间表示 进行特定平台的优化, 例如指令选择, 寄存器分配等等
- 代码生成 (
Code-Generation): 将优化后的中间表示 转换为目标平台的代码, 如JVM字节码,JavaScript代码, 或者原生的机器码. - 链接 (
Linking): 把生成的代码和外部模块连接起来, 生成最终的可执行文件或者可以运行的程序
新架构目标表现的优点
- 改进的调用解析和类型推断, 在所有的平台 编译器表现的更加的一致
- 更容易引入 语法糖,对
Jetbrain团队的帮助 - 更快的编译时间
IDE性能增强- …
在
MAVEN中支持K2.
<properties>
<kotlin.version>2.0.0</kotlin.version>
</properties>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>2.0.0</version>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>在
GRADLE中支持K2
3-K2 Compiler
- 新的类型推理算法:
1.4.0稳定了 - 新的
JVMIR后端:1.5.0稳定了 - 新的
JS IR后端:1.6.0中稳定了 - 新的
Frontend.
在下面的视频中详细解释了 原理: 视频地址