Kotlin
A concise multiplatform language developed by JetBrains
Kotlin 1.5.30 现已发布!
Kotlin 1.5.30是Kotlin 1.6.0 之前的最后一个增量版本,它包含许多计划在Kotlin 1.6.0发布的实验性语法和标准库特性。 请尝试这些新的功能并反馈给我们,您宝贵的建议将会影响最终的结果! 这些实验性功能包括了, 密封的 when 语句、要求(Opt-In) 的变化、注解类的实例化, 以及 Duration(时间) API 和 Regex(正则) API 的变化,等等。
在Kotlin 1.5.30中,你可以享受对 Apple silicon 的原生支持、Kotlin/JS IR 后端晋升为Beta版、并且能够在多平台应用程序的共享原生代码中使用自定义 cinterop 库,Kotlin Gradle 插件新增了对 Java 工具链的支持,等等。
这篇博文概述了这个版本的更新:
- 语言改进,包括密封的
when
语句、支持 以suspend
函数为父类,以及要求 (Opt-In) 的变化。 - 多平台改进,包括了能够在共享的 Kotlin Native 代码中使用自定义
cinterop
库,以及支持 XCFrameworks 作为输出格式。 - Kotlin/JVM改进,包括注释类的实例化、新增了对空注释的配置。
- Kotlin/Native改进,包括对 Apple silicon 的本地支持和以及针对 CocoaPods Gradle 插件的改进的 Kotlin DSL。
- Kotlin/JS IR的改进,包括将 JS IR 后端晋升为 Beta 版,并为新后端提供更好的调试体验。
- Gradle 的改进,包括对 Java 工具链的支持和更简单地为 Kotlin 守护进程设置 JVM 参数的方式。
- 标准库的改进 ,
Duration
(时间) API andRegex
(正则) API。
自动升级至 Kotlin 1.5.30
如果您使用的是 IntelliJ IDEA 或 Android Studio,您可以通过提供的选项在第一时间内自动更新至最新版本。
了解更多有关Kotlin 1.5.30 安装的信息。
Note: the latest version of IntelliJ IDEA – 2021.2 – doesn’t support Kotlin 1.5.30. If you have already upgraded, you can easily install IntelliJ IDEA 2021.1 using the JetBrains Toolbox App and use Kotlin 1.5.30 in that version, or you can wait for the Kotlin 1.5.31 bug-fix release.
语言
Kotlin 路线图包括增加对密封类的 when 语句的支持,发布要求(Opt-In) 注释,优化自动类型推理,以及稳定 Builder 的推理。
Kotlin 1.5.30 提供了这些功能的预览,计划在 1.6.0 中发布。
密封类的 when
语句
密封类的 when
是一个期待已久的功能,它在 YouTrack 上有多达 280 张投票。 如果您 在 1.5.30中启用此功能,当when
语句没有覆盖全面,Kotlin 编译器将会警告您 。 这将使您的代码更安全,并且无需引入自己的功能。
请尝试这个功能,并在此YouTrack Ticket中提供反馈。
支持父类型 挂起
函数
Kotlin 1.5.30 提供了将 挂起
函数类型作为父级接口的预览,尽管它还有一些限制。 它是Kotlin协程设计里未实现的一部分。
启用这个特性,尝试一下并提供您的反馈, 这是YouTrack的传送门。
对于 opt-in 要求的改变
opt-in 注解更加接近 release 了,Kotlin 1.5.30 带来了:
- 针对要求使用或声明 opt-in 注解的不同目标提出了新规则
- 即使对实验性 API 的隐式使用也需要 opt-in。 例如,如果函数的返回类型是被标记了实验性 API 的元素,那么使用这个函数需要 opt-in,即便它没有显式声明需要 opt-in。
请尝试并在YouTrack的这里反馈。
了解更多有关 opt-in的要求。
泛型递归类型推断的改进
当启用泛型递归的类型推断后,只要它是泛型递归,Kotlin 1.5.30编译器可通过相关类型参数的上界来推断参数类型。 这使得创建泛型递归的各种模式成为可能,这些泛型通常用于 Java 的建造者模式 API。
消建造者模式推断限制的消除
随着消除建造者模式推断限制的启用,Kotlin 1.5.30移除了对建造者模式的推断限制。 您不仅可以指定建造者可以推断的类型信息,还可以使用 get
函数。 例如,您可以在 buildList()
的 lambda 参数中调用 get()
,而无需显式指定其类型参数。
Kotlin Multiplatform
Kotlin 1.5.30 包含了Kotlin Multiplatform的以下改进:
- 在共享的原生代码中使用定制
cinterop
库的能力,从而扩展了Kotlin/Native附带的平台依赖库的能力。 - 所有Kotlin跨平台项目支持以XCFrameworks 作为输出格式。 XCFrameworks 助力于收集独立捆绑包中所有目标平台和架构的逻辑,并且在发布应用程序到应用商店之前,不要求删除不需要的架构。
- 安卓工件新的默认发布配置。 默认情况下,该配置与所有构建类型(如
debug
或release
) 兼容。 在1.5.30以前,当需要发布Android多平台库,metadata由maven-publish
Gradle插件生成,其包含了每个所发布Android变体的构建类型值。 这导致库的用户只能使用相同的构建类型。
Kotlin/JVM
在Kotlin1.5.30,Kotlin/JVM获得了以下更新:
- 改进了可空注解的支持配置项。 您可以根据特定类型可空注解中的配置指定编译器是否报告未匹配的空值。 了解如何 启用这个改进 ,并查看可空注解所支持的完整列表 ,该注解扩展自 RxJava3 的注解。
- 注解类的 实例化。 如果您 启用这个特性,您可以在任意代码中调用注解类的构造方法以获得其实例。 该特性覆盖了Java规范相同的用例,允许实现注解接口。 阅读这个KEEP了解更多关于注解类的实例化。
Kotlin/Native
Kotlin 1.5.30提供了对Kotlin/Native的如下改进:
- 对苹果silicon的原生支持 现在您可以在苹果silicon硬件上,为基于英特尔的Mac上支持的所有目标构建应用,而无需使用 转译模式。 New targets introduced in 1.5.30 –
macosArm64
,iosSimulatorArm64
,watchosSimulatorArm64
, andtvosSimulatorArm64
– make it possible to run Kotlin code on Apple silicon natively. - 改善CocoaPods Gradle插件的Kotlin DSL Kotlin 1.5.30通过为框架提供一种新的DSL格式来改进CocoaPods配置,这种格式与苹果目标的框架定义一致。 您可以定制它是静态类型还是动态类型,支持显式导出依赖项和Bitcode嵌入,并配置其他选项。
- 和Swift 5.5 async/await的互操作性实验。了解更多Swift 5.5互操作性的当前状态,并在YouTrack issue留下你的反馈 。
- 没有导入 MinGW(Windows) 库的情况下, 与 DLL 的联系被弃用。 该弃用是切换到 LLD链接器的结果,具有更好的性能和其他改进。 请随时分享您的想法和在这个YouTrack issue对LLD链接器过渡的关心 。
- 改善了伴生对象和Swift/Objective-C对象的映射。 现在,您可以使用
.shared
和.companion
属性来更直观地访问对象和伴生对象。
Kotlin/JS
Kotlin 1.5.30为Kotlin/JS带来了如下改进:
- JS IR 编译器后端已Beta。 为了让迁移到新的后端更简易,您可以使用迁移指南和新的 Kotlin/JS Inspection Pack IDE 插件,引导您直接在 IntelliJ IDEA 中进行必要的更改。
- 对于Kotlin/JS IR后端应用程序更好的调试体验, 感谢JavaScript源代码映射的生成。 现在,您可以从任何支持 JavaScript 调试器具有恰当源引用的断点、步进和可读堆栈痕迹中受益。 了解更多关于 调试Kotlin/JS应用程序的信息。
Gradle
Kotlin 1.5.30 引入了以下特性,以改善Kotlin Gradle 插件的用户体验:
- 支持Java工具链。 Gradle 6.7 引入了对 Java 工具链的支持,这使得选择 JDK 进行项目编译更加容易。 只需在构建脚本中声明您需要的版本,Gradle 即可完成余下的部分,你可在机器上找到它,如果没有的话则需要下载并安装。 Kotlin Gradle插件支持Kotlin/JVM编译任务的Java工具链。 对于Gradle版本6.1-6.6,通过
UsesKotlinJavaToolchain
接口设置JDK Home。 - 更简单指定Kotlin JVM守护线程参数的方式。 如果没有为Kotlin守护线程显式指定,它将继承Gradle守护线程的参数。 现在,您还可以为特定任务以及Kotlin扩展指定参数,在
build.gradle.kts
或gradle.properties
中通过单行设置。
build.gradle.kts
gradle.properties
标准库
Kotlin 1.5.30 为标准库的 Duration
和 Regex
API 带来了改进:
Duration API 的改进
正如我们标准库的路线图所示,我们打算让Duration API在Kotlin 1.6.0稳定化,意味着这是最后尝鲜的机会了,请与我们分享您任何想改善它的想法。 我们将在这个KEEP感谢您的反馈。
Kotlin 1.5.30 提供了 API 改善后的预览。 现在Duration.toString()
的输出现在更具可读性了。 例如,Duration.minutes(920).toString()
将输出15h20m
,而不是以前的920m
。
负的持续时间现在以负号(-
) 作为前缀,如果由多个部分组成,则通过括号包裹: -12m
and -(1h 30m)
。
这个版本还提供了从字符串解析成Duration的新函数的预览。
parse()
将类似于 Duration 的toString()
或符合 ISO 8601 标准的字符串解析为 Duration 对象(例如toIsoString()
的输出)。parseIsoString()
将 ISO 8601 表示的字符串解析成 Duration 对象。*OrNull()
两个函数的对应项。
正则API的改进
Kotlin 1.5.30 为正则表达式提供了新的实验性函数:
matchesAt()
检查在字符串的特定位置是否能匹配regex。matchAt()
返回所匹配到的第一个match。
splitToSequence()
是split()
对应的惰性函数。 它根据给定的 regex 拆分字符串,但是返回结果是Sequence
。CharSequence
也增加了一个类似的函数。
如何安装 Kotlin 1.5.30
如果您使用的是 IntelliJ IDEA 或 Android Studio,它会建议在版本发布后自动更新 Kotlin 到 1.5.30。 您也可以按照说明手动更新。
您仍然可以下载这些 IDE 的最新版本以保证对 Kotlin 的全面支持:
- 用于为不同平台开发 Kotlin 应用程序的 IntelliJ IDEA。
- 用于开发 Android 和跨平台的移动应用程序的 Android Studio。
确保您已将 kotlinx 库更新到兼容版本,并在现有项目的构建脚本中指定 Kotlin 版本为 1.5.30。
如果需要命令行编译器,请在GitHub版本页面下载。
如果遇到任何问题
Stay up to date with information about the latest Kotlin features! Subscribe to receive Kotlin updates by filling out the form to the right of this post.
更多的阅读和观看资料
- What’s new in Kotlin 1.5.30 video
- What’s new in Kotlin 1.5.30 docs
- Kotlin 1.5.20 blog post
- Kotlin 1.5.0 blog post
- Kotlin roadmap
外部贡献者👏👏👏
我们要感谢所有外部贡献者,此版本中包含了他们的拉取请求:
Jinseong Jeon, pyos, Tianyu Geng, Mark Punzalan, Mads Ager, Ivan Gavrilovic, Steven Schäfer, Vladimir Ivanov, Hung Nguyen, Matthew Gharrity, Jiaxiang Chen, Ivan Kochurkin, Iaroslav Postovalov, Toshiaki Kameyama, Udi Cohen, Xin Wang, bracadabra