释放

芬兰湾的科特林1.6.0发布

Kotlin 1.6.0现在正式发布了Stable详尽版等到、Kover和Kotlin/Native的一个新的内存管理器。1.5.30中发布的其他语言和标准库特性稳定的也感谢您与我们分享的反馈。如果您还没有尝试这些新功能,现在是时候了!

在这篇博文中,你可以找到以下更新的概述:

  • 语言特性使用密封的when语句、暂停函数和暂停转换、注释类的实例化、改进的规则类型推断和构建器类型推断。
  • 芬兰湾的科特林/ JVM具有优化的委托属性和可重复的注释。
  • 芬兰湾的科特林/本机新内存模型的预览,Xcode 13支持,Windows目标的交叉编译,LLVM和链接器更新,性能更新,以及统一编译器插件ABI。
  • 选项禁用Node.js和Yarn的下载芬兰湾的科特林/ JS
  • Kover公告。
  • 标准库标准输入新功能,稳定typeOf ()、稳定持续时间API和其他稳定的标准库函数。

订阅登录我们的博客,不要错过任何Kotlin的更新

如何更新

如果你使用IntelliJ IDEAAndroid工作室,您可以选择在新的Kotlin发行版可用时自动更新到它。

了解更多关于安装芬兰湾的科特林1.6.0

更新到Kotlin 1.6.0

语言特性

根据您的反馈,我们稳定了Kotlin 1.5.30的特性。

密封(彻底)语句

密封是一个期待已久的该特性使Kotlin编译器在when语句不详尽时发出警告。这使您的代码更安全,而不必引入自己的函数。

Kotlin在检查方面总是穷尽无遗表达式用于密封类、枚举和布尔类型。当您使用这些代数数据类型对域建模时,它非常有用。例如,你可能有不同的契约首选项,你的应用程序的用户建模为一个密封的类层次结构:

现在,如果你写了一个表达式,根据不同的联系人偏好返回不同的结果,如果你忘记处理你的应用程序中的所有类型,编译器将标记一个错误:

这对编写代码和将来的维护都有很大的帮助。如果您稍后添加不同类型的联系首选项,您知道编译器将确保您没有忘记处理代码周围的不同类型的联系首选项。

但是,在Kotlin 1.6之前,下面的代码使用语句成功编译,即使它完全忘记处理通过即时消息发送通知给用户:

只报告了一个弱IDE检查,没有来自编译器的任何消息。从Kotlin 1.6开始,它会产生以下编译器警告:

在1.7中将禁止在密封类/接口上使用非详尽的'when'语句。添加一个'is InstantMessage'分支或'else'分支。

在Kotlin 1.7中,它将成为一个错误,不可能不小心忘记它。请参阅kt - 47709以获取有关变化及其影响的更详细解释。

挂起的功能是超类型

Kotlin 1.6稳定了对实现的支持暂停作为超级接口的函数类型。它是Kotlin协程设计中缺失的部分之一。

在设计Kotlin api时,当需要定制各种库函数的行为时,习惯上接受函数类型。例如,kotlinx.coroutinesAPI在其Job接口中有一个类似这样的成员函数:

您可以方便地将此函数与lambda一起使用,比如invokeOnCompletiondoSomething().如果您有一个想要处理完成的类,您可以通过实现函数类型来简化和优化代码() - >单位直接在你的类中,而不创建额外的lambda:

从Kotlin 1.6开始,这种优化可以通过挂起函数实现。如果你的api接受挂起函数类型,像这样:

那么你就不再局限于传递lambda和挂起对这段代码的函数引用。你也可以在一个类中实现相应的挂起函数类型:

暂停转换

Kotlin 1.6稳定了从常规函数类型到暂停函数类型的转换。现在可以传递任何合适的正则函数类型的表达式,其中期望将suspend作为参数。编译器将自动执行转换。

这修复了Kotlin中常规函数和挂起函数之间交互的一个小但恼人的不一致。你有一个接受悬挂函数的高阶函数,比如收集调用Kotlin流,然后不用lambda来调用它,像这样:

,您可能会发现传递一个引用到processItem函数收集同样的意思是:

然后将对处理函数的引用提取到变量中,以便自定义代码中的行为。然而,这在1.6之前的Kotlin版本中并不适用。这是因为你有一个常规函数被作为一个挂起类型的参数传递:

在Kotlin 1.6中,上面的代码也可以编译和工作。

改进了递归泛型类型的类型推断

从1.6.0开始,如果默认情况下是递归泛型,Kotlin编译器只能根据对应类型形参的上界推断类型实参。这使得使用Java中经常用于构建生成器api的递归泛型类型创建各种模式成为可能。

Builder推理的改进

Kotlin 1.5.30引入了-Xunrestricted-builder-inference编译器选项,该选项使有关构建器调用的类型信息可用,以获得构建器lambda内部。也就是说,它引入了调用的能力,可以返回尚未推断的类型的实例,例如get ()在一个buildList ()λ。

从1.6.0开始,不需要指定-Xunrestricted-builder-inference打以前被禁止的电话与-Xenable-builder-inference编译器选项,您现在还可以编写自己的泛型构建器,而无需应用@BuilderInference注释,并在常规类型推理无法解析类型信息时自动启用构建器推理。

长期支持以前的API版本

从Kotlin 1.6.0开始,您现在可以使用三个以前的API版本而不是两个(以及当前的稳定版本)进行开发。目前,这包括API版本1.3、1.4、1.5和1.6。

芬兰湾的科特林/ JVM

具有运行时保留功能的可重复注释。芬兰湾的科特林,就像Java 8,具有可重复的注释。在Kotlin 1.6中,该特性与Java兼容@kotlin.annotation.Repeatable现在接受任何保留,并使注释在Kotlin和Java中都可重复。现在Kotlin端也支持Java可重复注释。

芬兰湾的科特林/本机

现在你可以试试实验版的新的Kotlin/原生内存管理器.有了这个功能,我们离在多平台项目中提供一致的开发人员体验更近了一步。这意味着新的内存管理器取消了线程间对象共享的现有限制,并提供完全无泄漏的并发编程原语,这些原语是安全的,不需要开发人员提供任何特殊的管理或注释。

你可以自由地更新你的Xcode,并继续在你的Kotlin项目中工作,现在是Kotlin/Native支持Xcode 13

编译任何主机上的Windows目标。您可以编译Windows目标mingwX64而且mingwX86在任何支持Kotlin/Native的主机上。

我们已经重做LLVM依赖Kotlin/Native在引擎盖下使用的。这带来了一些好处,并将LLVM版本更新到11.1.0,减少了依赖项的大小。

具有JVM和JS IR后端的统一编译器插件ABI.现在,Kotlin多平台Gradle插件能够使用嵌入式编译器jar——用于JVM和JS IR后端——用于Kotlin/Native。您现在可以为Native和其他受支持的平台使用相同的编译器插件构件。

芬兰湾的科特林/ JS

对于在没有互联网连接的服务器上构建,你现在可以禁用下载Node.js和Yarn的Kotlin/JS项目,并使用主机上已经安装的实例。

Kover

从第一个版本开始,精确度量代码覆盖率一直是一个挑战。一些很好的工具,比如JaCoCo可以使用Kotlin代码,但是它们并没有完全集成到我们的Gradle工具链和多平台项目中。在这个Kotlin版本中,我们已经开始修复这个问题。认识一下Kover,我们新的Gradle插件,它测量用Kotlin/JVM编译器构建的Kotlin代码的代码覆盖率。现在它是在早期开发阶段和实验-我们将感谢您的反馈在GitHub

观看Kover视频了解更多细节

标准库

Kotlin 1.6.0通过以下方法完成三个stdlib路线图项摆脱!!readLine ()稳定typeOf (),提供稳定持续时间API.它还将以下stdlib函数提升为稳定的

  • 收集建筑商
  • 对整数的位旋转操作
  • 正则表达式函数,用于将字符串拆分为序列

我们还添加了呼叫功能compareTo在中缀符号和投资提供一致的经验与替换()函数在JVM和JS上。

标准输入的新功能

在Kotlin 1.6.0中,我们不再需要使用非空断言操作符!!从标准输入中读取一行,以提高新手的体验,简化Kotlin的教学。

我们提供了从控制台读取的新功能,具有以下体验:

  • readln ()当到达EOF时抛出异常。使用此函数代替检查的结果readLine ()!!操作符。
  • readlnOrNull ()是一个受益者)的选择。它的行为方式与前者相同readLine ()但有一个更有代表性的名字。

这些函数现在可用于JVM和Native。这些函数的命名约定现在与println ()对口,这对新人来说尤其重要。

稳定持续的API

感谢你的反馈,我们已经稳定了持续时间API和关闭相应的路线图项

此外,输出的可读性更强Duration.toString ()而且解析字符串中的持续时间的新函数在1.5.30的预览版中,持续时间API有了以下变化:

  • 组件的toComponents函数现在有类型,而不是Int避免截断值。
  • DurationUnitEnum现在不是类型别名。不存在使用它作为类型别名的情况java.util.concurrent.TimeUnit在JVM上。
  • 作为对社区反馈的回应,我们将带回扩展属性,如Int.seconds.为了限制它们的适用性,它们只在Duration类的Companion中可用。

稳定的typeOf ()

芬兰湾的科特林1.6.0带来稳定的typeOf ()和关闭相应的路线图项自从1.3.40typeOf ()已经在JVM平台上作为实验API提供,现在您可以在任何Kotlin平台上使用它并获得一个KType编译器可以推断的任何Kotlin类型的表示形式。

稳定的集合建筑商

Kotlin 1.6.0促进了集合构建器函数-buildMap ()buildList (),buildSet ()-稳定的.构建器返回的集合现在在只读状态下是可序列化的。

整数的稳定位旋转操作

在Kotlin 1.6.0中rotateLeft ()而且rotateRight ()将数字的二进制表示按指定的位数左右旋转的函数变成稳定的

稳定的正则表达式函数,用于将字符串拆分为序列

Kotlin 1.6.0也稳定了splitToSequence ()-用于正则表达式的函数,它将字符串分割为序列。

compareTo是中缀表示法

我们添加了调用的功能Comparable.compareTo函数以中缀表示法比较两个对象的顺序:

在JVM和JS上一致的replace()和replaceFirst()

在Kotlin 1.6.0之前,替换()而且replaceFirst ()当替换字符串包含组引用时,Regex函数在JVM和JS上的表现不同。Kotlin/JS上的行为现在与JVM上的行为一致。

兼容性

与所有特性版本一样,在Kotlin 1.6.0中,以前宣布的一些更改的弃用周期即将结束。所有这些案例都经过语言委员会的仔细审查,并列在Kotlin 1.6兼容性指南.你也可以在YouTrack上探索这些变化。

如何安装Kotlin 1.6.0

如果您正在使用IntelliJ IDEAAndroid工作室,您的IDE将建议自动将Kotlin更新到1.6.0。或者,也可以按以下方法手动更新这些指令

您可以下载这些ide的最新版本以获得对Kotlin的广泛支持:

确保您已经将kotlinx库更新到兼容版本并在现有项目的构建脚本中指定Kotlin 1.6.0。

如果需要命令行编译器,请从Github发布页面

如果你遇到任何问题:

跟上最新的Kotlin特性!通过填写本文右侧的表格,订阅接收Kotlin更新。

还有什么可看的呢

YouTrack的顶级问题记者

瑞安净(48问题),扎克Sweers(22个问题),天宇耿(18个问题),zhelenskiy(18个问题),Thodoris Sotiropoulos(15个问题),AndroidDeveloperLB(14个问题),摩根,巴塞洛缪(14个问题),米哈伊尔·Naftal(14个问题),路易CAD(12个问题),菲利普Wedemann(12个问题),维克多区别(11个问题),Igor Wojda(11个问题),马丁Bonnin(11个问题),Iaroslav Postovalov(11个问题),塞德里克(10个问题),(9)问题,本Woodworth(8)问题,天一关(8)问题,克里斯Povirk(8)问题,阿龙艾伯特(8)的问题。

外部贡献者

我们要感谢所有的贡献者,他们的拉请求包括在这个版本中:巴西天宇耿Jinseong全史蒂文·谢弗马克Punzalan挂着阮尼蒸机Ting-Yuan黄马修Gharrity伊凡Gavrilovic新王ov7a(陈Yigit BoyarBingranbracadabra施特菲·Stumpos安德烈Kuleshov

Baidu