Kotlin logo

Kotlin

A concise multiplatform language developed by JetBrains

Releases

Kotlin 1.5.30 现已发布!

Read this post in other languages:

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 工具链的支持,等等。

Update to Kotlin 1.5.30

这篇博文概述了这个版本的更新:

  • 语言改进,包括密封的 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 and Regex(正则) 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多平台库,metadatamaven-publish Gradle插件生成,其包含了每个所发布Android变体的构建类型值。 这导致库的用户只能使用相同的构建类型。 

Kotlin/JVM

在Kotlin1.5.30,Kotlin/JVM获得了以下更新:

Kotlin/Native

Kotlin 1.5.30提供了对Kotlin/Native的如下改进:

Kotlin/JS

Kotlin 1.5.30为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.ktsgradle.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.

更多的阅读和观看资料

外部贡献者👏👏👏 

我们要感谢所有外部贡献者,此版本中包含了他们的拉取请求:

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

特别感谢由来自 Kotlin 社区的 黄智聪 (pye52)Xiaoshen(Smallshen) 为本篇博文提供中文译文。
image description

Discover more