查看原文
其他

Kotlin 1.5.0 – 2021 年的首个大版本

IDE Android 开发者 2022-05-12



欢迎新版本计划表的第一个功能版本 —— Kotlin 1.5.0


  • 新版本计划表

    https://blog.jetbrains.com/kotlin/2020/10/new-release-cadence-for-kotlin-and-the-intellij-kotlin-plugin/


这个版本提供了稳定的语言特性,如 JVM records,密封接口,内联值类,并包括了新的默认的 JVM IR 编译器。您在 Kotlin 1.4.30 和 Kotlin 1.5.0 EAP 版本中预览特性的反馈切实帮助我们去稳定这些功能。我们非常感激您的协助。谢谢!


  • Kotlin 1.4.30

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-4-30/


已经有多达 25,000 名开发者尝试过 IntelliJ IDEA 上新的 JVM IR 编译器了。

  • IntelliJ IDEA

    https://www.jetbrains.com/idea/download/#section=mac


您会逐渐留意到其优势。新的编译器与 Kotlin/Native 和 Kotlin/JS IR 编译器共享标准统一的管道和业务逻辑,这将使我们能够同时为所有平台实现大多数特性,优化和错误修复。它还将允许添加在所有平台上自动运行的自定义处理和转换

您对于 Kotlin 1.5.0 还有什么疑问?在 5 月 25 日的 Kotlin 在线活动,Roman Elizarov, Svetlana Isakova,以及其他 Kotlin 团队的成员,已准备就绪回答您的问题。

  • Roman Elizarov

    https://twitter.com/relizarov

  • Svetlana Isakova

    https://twitter.com/sveta_isakova


您可以点击文末阅读原文,或使用报名链接进行 KOTLIN 1.5 在线活动登记: 

https://pages.jetbrains.com/kotlin-online-event-2021


在这篇文章中,您将会看到以下内容的概述:

  • 稳定的语言特性 —— JVM 记录 (records),密封接口和内联值类。

  • 标准库和测试库的改进,包括稳定的无符号整数类型,java.nio.file.Path 的扩展以及 String,Char 和 Duration API 的改进。

  • Kotlin/JVM 的改进,包括新的默认 JVM IR 编译器。

  • Kotlin/Native 改进,包括针对调试 Linux 和 iOS 应用程序更快速的编译速度。

  • Kotlin/JS 改进,包括已迁移了更多 JS 库到新的 Kotlin/JS IR 编译器。



自动升级到 Kotlin 1.5.0


如果您使用的是 IntelliJ IDEAAndroid Studio,您可以通过它提供的选项,当 Kotlin 的新版已就绪,将自动升级到最新的版本。


  • IntelliJ IDEA

    https://www.jetbrains.com/idea/download/

  • Android Studio

    https://developer.android.google.cn/studio


在下文我们将介绍更多有关 Kotlin 1.5.0 安装的信息。



稳定的语言特性


Kotlin 1.5.0 包含了在 1.4.30 中提供预览的新语言特性的稳定版本:

  • 1.4.30 中提供预览

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-4-30/


  • 对 JVM records 的支持以及保持和 Java 最新特性—— record 类的互操作性。要将 Kotlin 类编译为 Java 代码中的 record,将其声明为 data 类,并通过 @JvmRecord 注解标记:


  • record 类

    https://openjdk.java.net/jeps/395

@JvmRecord data class User(val name: String, val age: Int)

您可以访问相关文档,了解使用 JVM records 所需条件的更多信息:

https://kotlinlang.org/docs/jvm-records.html#requirements


  • 密封接口 sealed 修饰符在接口与在类上的原理相同——密封接口的所有实现在编译时均为已知状态。

sealed interface Polygon


  • 密封类的改进以前,所有子类都必须与密封类放在同一个文件中。现在它们可以位于相同编译单元和相同程序包的任意文件中。


  • 内联类是只包含值为基础类型的类的子集。您可以用它们为某个指定类型的值进行封装,而不会因为内存分配而产生额外的开销。通过 value 修饰符进行声明。


  • 值为基础类型的类

    https://github.com/Kotlin/KEEP/blob/master/notes/value-classes.md

@JvmInline //required for the JVM backend value class Password(val s: String)


了解更多有关 Kotlin 1.5.0 语言特性的信息:

  • 语言特性预览博文

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-4-30/

  • 语言文档

    https://kotlinlang.org/docs/whatsnew15.html#language-features

  • 语言相关系列视频

    https://space.bilibili.com/414846001/channel/detail?cid=183063

[Kotlin 1.5 新特性] 从内联类到内联值类



标准库及测试库的改进


无符号整数类型的新稳定 API 是最令人期待的 Kotlin 1.5.0 库改进,这是根据我们在 Kotlin 1.5.0-RC 博文中调查所得的结果。

  • Kotlin 1.5.0-RC
    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-5-0-rc-released/

标准库提供了许多有用的功能,包括:

  • 用于无符号整数类型的新稳定 API,以及它们的范围,级数和函数。了解更多有关无符号整型的信息。

  • java.nio.file.Path扩展函数,以 Kotlin 惯用风格调用的现代非阻塞 Java IO

  • String 和 Char API 的改进,包括用于更改字符串和字符大小写的新的与语言环境无关的 API,用于在字符及其整数代码和数值之间进行转换的一组新函数,以及更多兼容多平台的 char 函数。

  • Duration API 变动,包括内部使用 Long 值表示,并提供新的属性以获取 duration 的 Long 值。


  • 无符号整型
    https://kotlinlang.org/docs/basic-types.html#unsigned-integers
  • java.nio.file.Path
    https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
  • 非阻塞 Java IO
    https://docs.oracle.com/javase/8/docs/api/java/nio/package-summary.html

测试库带来了一系列重要的改进:

  • 只需要在多平台项目的公共源集里对 kotlin-test 进行单次依赖。

  • 当您指定唯一的 kotlin-test 依赖项时,会自动为 Kotlin/JVM 源集选择测试框架。

  • 大量断言函数的更新。


了解更多有关库改善的信息:

  • 带示例的库改善博文

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-5-0-rc-released/

  • What’s new in Kotlin 1.5.0

    https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#standard-library
  • 视频

    https://www.bilibili.com/video/BV1wy4y1x76a/
[Kotlin 1.5 新特性] 标准库更新及新特性


Kotlin/JVM


Kotlin 1.5.0 带来了:
  • 在 Kotlin 1.4.0 宣布的新 JVM IR 编译器稳定,并成为默认项。在博文文档中了解更多有关新编译器的信息。

  • SAM adapters 和 lambda 将编译为动态调用 (invokedynamic),这得益于最新的 JVM 特性。Kotlin plain lambdas 的编译是实验性的

  • 新的默认 JVM target: 1.8。而 1.6 target 已被弃用。

  • 改进了对于 Java 中类型可空性信息的处理方式:

    https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#improvements-to-handling-nullability-annotations

  • 弃用 @JvmDefault 和旧的 Xjvm-default 模式:

    https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#deprecation-of-jvmdefault-and-old-xjvm-default-modes


  • 宣布的新 JVM IR 编译器
    https://blog.jetbrains.com/zh-hans/kotlin/2020/08/kotlin-1-4-released-with-a-focus-on-quality-and-performance-zh/
  • 稳定
    https://kotlinlang.org/docs/components-stability.html
  • 博文
    https://blog.jetbrains.com/kotlin/2021/02/the-jvm-backend-is-in-beta-let-s-make-it-stable-together/
  • 文档
    https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#stable-jvm-ir-backend
  • SAM adapters 和 lambda 将编译为动态调用 (invokedynamic)
    https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#sam-adapters-via-invokedynamic
  • 实验性的
    https://kotlinlang.org/docs/components-stability.html


Kotlin/Native


Kotlin 1.5.0 提供了:

  • 在 linuxX64 和 iosArm64 目标的调试模式下支持编译器缓存。当编译器缓存启用,除第一次调试编译外,大部分调试编译的速度都将更快。测量结果表明,我们测试项目的编译速度提高了 200%。

  • 停用内置的内存泄漏检查器,以避免可能导致的应用程序崩溃问题。了解如何启用内存泄漏检查器 (如有必要)。


  • 编译器缓存
    https://blog.jetbrains.com/kotlin/2020/03/kotlin-1-3-70-released/#kotlin-native
  • 编译器缓存
    https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#performance-improvements
  • 启用内存泄漏检查器https://blog.jetbrains.com/kotlinlang.org/docs/whatsnew15.html#deactivation-of-the-memory-leak-checker



Kotlin/JS


Kotlin/JS 的新 Kotlin/JS IR 编译器迈向 Beta。许多著名的框架和库 KVisionfritz2doodle 等等已向 IR 编译器敞开怀抱。


  • 新 Kotlin/JS IR 编译器迈向 Beta

    https://youtrack.jetbrains.com/issue/KT-42289

  • KVision

    https://kvision.io/

  • fritz2

    https://www.fritz2.dev/

  • doodle

    https://github.com/nacular/doodle

  • IR 编译器

    https://kotlinlang.org/docs/js-ir-compiler.html


如果您是库的作者,则可以通过向后兼容性库迁移来添加您的库。


  • 通过向后兼容性库迁移

    https://kotlinlang.org/docs/js-ir-compiler.html

另一个额外的改进是通过 webpack 5 而非 webpack 4 来构建 JS bundle 包。


  • webpack 5

    https://webpack.js.org/blog/2020-10-10-webpack-5-release/



如何安装 Kotlin 1.5.0


如果您使用的是 IntelliJ IDEAAndroid Studio,它会建议在版本发布后自动更新 Kotlin 到 1.5.0。您也可以按照说明手动更新。


  • IntelliJ IDEA
    https://www.jetbrains.com/idea/download/
  • Android Studio
    https://developer.android.google.cn/studio
  • 说明
    https://kotlinlang.org/docs/releases.html


您仍然可以下载这些 IDE 的最新版本以保证对 Kotlin 的全面支持:
  • 用于为不同平台开发 Kotlin 应用程序的 IntelliJ IDEA。

  • 用于开发 Android 和跨平台的移动应用程序的 Android Studio。


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

  • 兼容版本

    hhttps://kotlinlang.org/releases.html

如果需要命令行编译器,请在 GitHub 版本页面下载。

  • GitHub 版本页面

    https://github.com/JetBrains/kotlin/releases/tag/v1.5.0


如果遇到任何问题


在 Slack 中寻求帮助 (获取邀请)。

  • Slack

    http://kotlinlang.slack.com/

  • 获取邀请

    hhttps://surveys.jetbrains.com/s3/kotlin-slack-sign-up


向我们的问题跟踪器 (YouTrack) 报告。


  • YouTrack
    https://youtrack.jetbrains.com/issues/KT



Kotlin 1.5 在线活动


参加 5 月 25 日的 Kotlin 1.5 在线活动,Kotlin 团队将回答您对最新版本的所有问题。您可以询问任何想知道的事情,或者您没有任何问题,只对回答感兴趣,那也不错。活动将持续 1.5 小时。

通过 #kotlin15ask 在 Twitter 上发布您的问题,或在此表格中添加您的问题:

https://pages.jetbrains.com/kotlin-online-event-2021


我们还将于 5 月 27 日至 28 日在 Reddit 上进行 "Ask Me Anything" (AMA) 讨论,以处理所有未解决的问题,同时也会回答新问题。



兼容性


与所有主要版本一样,某些先前宣布的变更的弃用周期将在 Kotlin 1.5.0 版本结束。所有这些情况都经过了语言委员会的仔细审查,并在 Kotlin 1.5 兼容性指南中列出。您也可以在 YouTrack 上浏览这些变更。


  • Kotlin 1.5 兼容性‍

    https://kotlinlang.org/docs/compatibility-guide-15.html

  • YouTrack

    https://youtrack.jetbrains.com/issues/KT



更多的观看及阅读材料


观看 Kotlin YouTube:

  • Kotlin 1.5.0 视频播放列表:

    https://youtube.com/playlist?list=PLlFc5cFwUnmySUsgUV90sZccj4U8XnsK_
  • 订阅 Kotlin YouTube,避免错过有关协程和序列化库新改进的视频:

    https://www.youtube.com/channel/UCP7uiEZIqci43m22KDl0sNw?sub_confirmation=1


阅读 Kotlin 博客:

  • Kotlin 1.5.0 语言特性预览:

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-4-30/
  • Kotlin 1.5.0 标准和测试库改进:

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-1-5-0-rc-released/
  • 新的 JVM IR 后端:

    https://blog.jetbrains.com/kotlin/2021/02/the-jvm-backend-is-in-beta-let-s-make-it-stable-together/
  • 改善 IntelliJ IDEA 对 Kotlin 的支持:

    https://blog.jetbrains.com/zh-hans/kotlin/2021/04/kotlin-ide-2021-1/


通过 Kotlin 文档了解更多信息:

  • Kotlin 1.5.0 新鲜事

    https://kotlinlang.org/docs/whatsnew15.html
  • Kotlin 1.5.0 兼容性指南

    https://kotlinlang.org/docs/compatibility-guide-15.html



外部贡献者


我们要感谢所有外部贡献者,此版本中包含了他们的 Pull Request:

Jinseong Jeon, Mads Ager, Ivan Gavrilovic, pyos, Steven Schäfer, Iaroslav Postovalov, scaventz, Kristoffer Andersen, Bingran, Stefan Wolf, Victor Turansky, fjjohnchen, justin.wei, Nelson Osacky, Mikhail Galanin, Michael Hoisie, Kris Hall, Kevin Bierhoff, Jiaxiang Chen, Hung Nguyen, Cedric Champeau.



YouTrack 的最佳问题报告


我们要感谢社区的所有成员,他们通过向 YouTrack 报告问题帮助我们改进了此版本!我们列出了前 20 名报告者,在此向他们致以衷心感谢:

Morgan Bartholomew (118 个问题); Marc Knaup (78 个问题); Ryan Nett (61 个问题); Louis CAD (48 个问题); Daniil Stepanov (44 个问题); AndroidDeveloperLB (39 个问题); Victor Turansky (38 个问题); Jinseong Jeon (35 个问题); Zac Sweers (25 个问题); Łukasz Wasylkowski (22 个问题); Tianyi Guan (21 个问题); Christoph Sturm (20 个问题); Axel Fontaine (19 个问题); Alexander Nozik (18 个问题); Robert Stoll (18 个问题); Björn Kautler (18 个问题); Róbert Papp (14 个问题); Andreas Malik (14 个问题); Lorenzo Neumann (14 个问题); Iaroslav Postovalov (14 个问题)。

即刻安装 Kotlin 1.5.0

https://blog.jetbrains.com/zh-hans/kotlin/2021/05/kotlin-1-5-0-released/#how-to-install

特别感谢由来自 Kotlin 社区的 Pye52 为本篇文章提供中文译文。



 点击屏末 | 阅读原文 | 即刻注册参加 Kotlin 1.5 在线活动!

推荐阅读

如页面未加载,请刷新重试


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存