JetBrains 正式对外宣称 Kotlin 2.0.0 已成功发布,并且其相关代码也已上传至 GitHub 库中。
下面我们一起来看一下Kotlin 2.0 新发布有哪些亮点。
一、K2编译器现已进入稳定状态:
默认适用于所有的平台(包括 JVM、Native、Wasm 以及 JS),并且其性能得到了显著的提升。在性能这一方面,JetBrains 团队编译了多达 1000 万行的代码,以此来确保其质量的稳定,这涉及到了 18000 余名开发人员以及 80000 多个项目。
二、IDE 支持:
- 新版的 Kotlin 插件已然集成于 IntelliJ IDEA 以及 Android Studio 之中。
- 新的 Compose 编译器也已和 Gradle 插件实现集成:自 Kotlin 2.0.0 起始,org.gradle.jvm.environmentGradle 属性默认会与 Kotlin 版本一同进行公布,如此便能更好地对 Kotlin 多平台库的 JVM 以及 Android 版本予以区分。
- 对于 Kotlinx-metadata-jvm 库:Kotlinx-metadata-jvm 库现今已进入稳定的状态。
三、Lambda 函数:
- Kotlin 2.0.0 引入了一种新的默认方法“invokedynamic”用于生成 lambda 函数,这能够生成体积更小的二进制文件。
- 在使用 Apple 平台上的标记(signposts)来监控 Kotlin/Native 中的 GC 性能方面:之前,开发者仅能凭借查看日志来对 Kotlin/Native 的垃圾回收器(GC)的性能进行监控。但是,这些日志并没有集成到 Xcode Instruments 当中(其是用于调试 iOS 应用性能问题的一个工具包)。自 Kotlin 2.0.0 起,GC 会通过 Instruments 中所提供的特殊标记来报告暂停情况,进而允许在应用程序内部进行自定义的日志记录。
- 比如,在一个具体的项目中,使用了 Kotlin 2.0.0 后,通过“invokedynamic”生成的函数让二进制文件的大小明显减小,提升了应用的加载速度。而对于 GC 性能的监控,现在可以更直观地在 Instruments 中看到相关的标记和暂停报告,方便开发者及时发现和解决可能出现的性能问题,就像在开发一款大型游戏时,通过这种方式可以及时优化内存管理,确保游戏的流畅运行。
四、使用 Objective-C 方法解决 Kotlin / Native 中的冲突:
- 在 Objective-C 中,方法可以采用不同的名称,不过必须具备相同的数量以及类型参数。举例来说,locationManager:didEnterRegion: 与 locationManager:didExitRegion:。在 Kotlin 中,它们都有着相同的签名,所以尝试去使用的时候就会触发冲突重载并报错。
- 放在从前,开发者必须要手动去解决冲突才能够避免这种编译错误,而出于改善 Kotlin 与 Objective-C 的互操作性的目的,Kotlin 2.0.0 引入了新的 @ObjCSignatureOverride 注释。这个注释会指示 Kotlin 编译器忽略冲突的重载,以防止从 Objective-C 类继承多个具有相同参数类型但参数名称不同的函数。
- 比如说,在一个混合使用 Kotlin 和 Objective-C 的项目中,以前遇到这种情况开发者可能需要花费不少时间和精力去逐个调整函数名或处理冲突,现在有了 @ObjCSignatureOverride 注释,就可以更便捷地处理这种情况,让代码的编写和维护更加高效,像在一个跨平台的应用开发中,能减少很多因这类冲突导致的麻烦,提升开发效率。
五、支持 Kotlin / Wasm 中的命名导出:
Kotlin 2.0.0 支持命名导出和无符号原始类型的 @JsExport 函数,这提高了可读性,帮助开发者更好地管理模块之间的依赖关系,也使 Kotlin 和 JavaScript 模块之间的代码共享更容易。此外,Kotlin 2.0.0 还支持生成 Kotlin / Wasm 中 TypeScript 声明文件(实验性功能,可能会随时被删),能根据 @JsExport Kotlin 代码中的声明生成 TypeScript 定义,让 IDE 和 JavaScript 工具使用这些定义来提供代码自动补完功能。
六、默认使用 Binaryen 优化生产版本:
Kotlin / Wasm 工具链现在会在生产编译过程中对所有项目默认应用 Binaryen 工具,而无需进行手动设置。官方估计,这将进一步改善项目的运行时性能并减小二进制文件大小。当然,此更改仅影响生产编译。开发编译过程保持不变。
七、用于多平台项目中编译器选项的新 Gradle DSL 实验性功能(可能随时被删):
Kotlin 2.0.0 引入了全新的 Gradle DSL,可用于在多平台项目中更轻松地配置编译选项。此前在 Kotlin 中使用 Gradle 配置编译选项只能针对较低的层面,例如单个任务、编译过程或源代码集。有了这个新的 Gradle DSL,您就可以直接设置全局配置编译选项。
1、替换枚举类值泛型函数的稳定方式
在 Kotlin 2.0.0 中,访问枚举类值的方式变得更加稳定。Kotlin 2.0.0 引入了新的专门用于枚举的稳定函数 enumEntries<T>(),可返回给定枚举类型 T 的所有枚举条目列表。
Kotlin 之前还引入了一个枚举类的属性 entries,目前已经进入稳定状态并将与上述函数一起替代“不再推荐使用”的 values ()。
2、稳定的 AutoCloseable 接口
自 Kotlin 2.0.0 开始,开发者常用的 AutoCloseable 接口宣布进入稳定状态,它可以允许开发者轻松关闭资源,并包含两种有用的函数:
-
use () 扩展函数,用于在选定的资源上执行给定的块函数,并保证能够在无论是否抛出异常的状态下都能正确关闭相关资源。
-
AutoCloseable () 构造函数,用于创建 AutoCloseable 接口的实例。
备注:上文文章材料出至IT之家,只做知识分享,如有侵权,请联系删除,谢谢!