Kotlin 1.9.0 正式发布

Kotlin 1.9.0 版本已正式发布,JVM 的 K2 编译器现已处于测试阶段。此版本包含新的语言功能以及 Kotlin Multiplatform 和 Kotlin/Native 的改进。

以下是此版本的重要内容:

新的 Kotlin K2 编译器更新

Kotlin 团队继续稳定 K2 编译器,1.9.0 版本引入了进一步的改进。 JVM 的 K2 编译器现在处于 Beta 阶段。

现在已提供对 Kotlin/Native 和多平台项目的基本支持。

枚举类值函数的稳定替换

在 1.8.20 中,枚举类的 entries 属性作为实验功能引入。 entries 属性是 values() 函数的现代且高性能的替代品。

在 1.9.0 中, entries 属性已经稳定。虽然仍支持 values() 函数,但官方建议改用 entries 属性。

enum class Color(val colorName: String, val rgb: String) {
    RED("Red", "#FF0000"),
    ORANGE("Orange", "#FF7F00"),
    YELLOW("Yellow", "#FFFF00")
}

fun findByRgb(rgb: String): Color? = Color.entries.find { it.rgb == rgb }

用于开放式范围的稳定 ..< 运算符

用于开放式范围的新 ..< 运算符在 Kotlin 1.7.20 中引入,并在 1.8.0 中变得稳定。在 1.9.0 中,用于处理开放式范围的标准库 API 也已稳定。

新的 ..< 运算符使声明开放式范围时更容易理解。如果使用 until 函数,很容易被错误地理解成包含上限。

以下是使用 until 函数的示例:

fun main() {
    for (number in 2 until 10) {
        if (number % 2 == 0) {
            print("$number ")
        }
    }
    // 2 4 6 8
}

这是使用新的 ..< 运算符的示例:

fun main() {
    for (number in 2..<10) {
        if (number % 2 == 0) {
            print("$number ")
        }
    }
    // 2 4 6 8
}

新的通用函数:通过名称获取正则表达式捕获组

在 1.9.0 中有一个通用函数 groups ,可以使用它通过正则表达式匹配的名称检索组的内容。在想要访问属于特定捕获组的正则表达式匹配结果时,这非常有用。

以下是包含三个捕获组的正则表达式的示例: city 、 state 和 areaCode 。可以使用这些组名称来访问匹配的值:

fun main() {
    val regex = """\b(?<city>[A-Za-z\s]+),\s(?<state>[A-Z]{2}):\s(?<areaCode>[0-9]{3})\b""".toRegex()
    val input = "Coordinates: Austin, TX: 123"

    val match = regex.find(input)!!
    println(match.groups["city"]?.value)
    // Austin
    println(match.groups["state"]?.value)
    // TX
    println(match.groups["areaCode"]?.value)
    // 123
}

用于创建父目录的新路径实用程序

1.9.0 中,有一个新的扩展函数 createParentDirectories() ,可以使用它来创建包含所有必需父目录的新文件。

createParentDirectories() 在复制文件时特别有用。例如,您可以将其与 copyToRecursively() 函数结合使用:

sourcePath.copyToRecursively(
   destinationPath.createParentDirectories(),
   followLinks = false
)

Kotlin 多平台中的 Gradle 配置缓存预览

Kotlin 1.9.0 支持多平台库中的 Gradle 配置缓存,库作者已经可以从改进的构建性能中受益。Gradle 配置缓存通过在后续构建中重用配置阶段的结果来加快构建过程。自 Gradle 8.1 以来,该功能已变得稳定。

注意:Kotlin Multiplatform 插件仍然不支持带有 Xcode 集成任务的 Gradle 配置缓存或 Kotlin CocoaPods Gradle 插件。

Kotlin 多平台中对 Android 目标的更改

将来,Google 的 Android 团队将提供自己的 Gradle 插件,以在 Kotlin 多平台中支持 Android。为了给 Google 让出名称, 1.9.0 中重命名了当前 Kotlin DSL 中的 android 块,将构建脚本中出现的所有 android 块更改为 androidTarget 。

这是一项临时更改,仅针对从 Google 中释放即将推出的 DSL 的 android 名称,后续 Google 的插件将成为在多平台项目中使用 Android 的首选方式。

Kotlin/Native 中自定义内存分配器(预览版)

Kotlin 1.9.0 引入了自定义内存分配器的预览版,该分配系统提高了 Kotlin/Native 内存管理器的运行时性能。它将系统内存划分为多个页面,允许按连续顺序进行独立清理。每次分配都会成为页面内的一个内存块,并且页面会跟踪块大小。

新的分配器允许同时拥有多个独立的分配空间,允许 Kotlin 团队尝试不同的页面布局,以进一步提高性能。

Kotlin/Native 中的库链接

从 Kotlin 1.9.0 开始,Kotlin/Native 编译器以与 Kotlin/JVM 相同的方式处理 Kotlin 库中的链接问题。

如果第三方 Kotlin 库之间出现链接问题,构建在编译期间不会失败。相反,只会在运行时遇到这些错误,就像在 JVM 上一样。

Kotlin/Native 编译器每次检测到库链接问题时都会报告警告。您可以在编译日志中找到此类警告,例如:

No function found for symbol 'org.samples/MyRemovedClass.doSomething|3657632771909858561[0]'

Can not get instance of singleton 'MyEnumClass.REMOVED_ENTRY': No enum entry found for symbol 'org.samples/MyEnumClass.REMOVED_ENTRY|null[0]'

Function 'getMyRemovedClass' can not be called: Function uses unlinked class symbol 'org.samples/MyRemovedClass|null[0]'

Kotlin/Wasm 中与文件大小相关的优化

Kotlin 1.9.0 为 WebAssembly (Wasm) 项目引入了显着的文件大小改进。比个“Hello World”项目,Kotlin 1.9.0 中 Wasm 的代码占用量现在比 Kotlin 1.8.20 中小 10 倍以上。

当针对具有 Kotlin 代码的 Wasm 平台时,这些大小优化可以提高资源利用率并提高性能。

 

有关更改的完整列表,请参阅 Kotlin 1.9.0 中的新增功能或 GitHub 上的发行说明

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/248354/kotlin-1-9-0-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。