Kotlin 1.4及以后 - 我们可以期待什么?
在KotlinConf 2019上,JetBrains的CTO Andrey Breslav讨论了Kotlin的发展方向。Kotlin 1.4版本将在2020年春天到来。Kotlin 1.4及以后的版本会给我们带来什么不一样的变化呢?
01
专注质量和性能
Kotlin 1.4将专注于质量和性能提升。Kotlin 1.4不再添加新的重大功能,而是侧重于稳定性和性能提升。
Kotlin团队已经在性能提升方面投入了很大的精力。Kotlin 1.3.60提升了IDE中代码自动完成提示的性能。Android Studio中的导入Gradle项目的性能提升了2.5倍。Kotlin将继续投入精力来提升构建速度。
02
新的编译器
Kotlin新的编译器一直在开发中。新编译器的功能将逐步替换已有的编译器。有些功能在Kotlin 1.3就已经存在,更多的功能会在1.4到来。新旧两个编译器会同时存在,直到新的编译器稳定下来。
Kotlin的编译器分成前端(front-end)和后端(back-end)两个部分。编译器前端负责分析代码、解析名称和检查类型等工作。IDE用编译器前端来高亮显示语法错误、在不同的定义之间跳转和搜索源代码符号等。新的编译器前端的性能会得到极大的提升。虽然这部分功能不会在Kotlin 1.4到来,JetBrains内部的性能测试表明新的编译器前端相对于已有实现有高达4.5倍的性能提升。
编译器后端负责生成可执行代码。目前Kotlin有3种后端,分别是Kotlin/JVM、Kotlin/JS和Kotlin/Native。前两种后端的实现是独立的,没有代码共享。Kotlin/Native的编译器后端基于一种内部表示(internal representation,IR)。前两种后端实现正在迁到到与Kotlin/Native同样的内部表示。这样不同的后端实现可以共享代码。有了通用的编译器后端之后,编译器插件可以对内部表现进行处理和转换。Kotlin 1.4不会发布编译器插件API。不过JetBrains的合作伙伴,如Google的JetPack Compose,已经在开发编译器插件。
KLib是Kotlin的库分发格式,包含序列化之后的Kotlin内部表示。当在代码中添加对KLib的依赖后,编译器后端可以生成特定平台上的可执行代码。KLib可以像JVM字节代码一样进行分析和转换。Kotlin/Native已经使用KLib作为分发形式,今后其他平台也会提供同样的支持。
03
多平台支持
在Kotlin多平台支持上,有更多的改进。
JetBrains正在开发一个Android Studio插件,可以在iOS设备和模拟器上运行、测试和调试Kotlin代码。
除了Linux、Windows、macOS和iOS之外,Kotlin/Native新增了对watchOS和tvOS的支持。几乎所有的设备都可以运行Kotlin 。
Kotlin核心库可以在全部平台上工作。核心库包括kotlin-stdlib、kotlinx.coroutines、kotlinx.serialization和kotlinx.io。新的日期时间库正在开发中。值得一提的是,Kotlin提供了基于coroutine的反应式流实现Flow。在某些性能测试中,Flow的性能比流行的反应式流实现要快2倍。
对Kotlin库的作者来说,Kotlin创建库的体验得到了提升。即将发布的Dokka 1.0可以生成全部平台的文档。
在浏览器平台方面,Kotlin/JS的性能得到了提升。在修改了Kotlin代码之后,浏览器会自动刷新,也就是熟悉的live-reload功能。可以在Kotlin项目中添加NPM依赖。TypeScript的类型定义文件(.d.ts文件)会被自动识别并转换。
在Kotlin/JS使用了新的通用的编译器后端之后,生成的JavaScript代码的尺寸也缩减到了原来的一半。