本次更新主要增加了以下新特性:
Kotlin/JVM
受益于最新的 JVM ,Kotlin 拓展了动态调用的使用(invokedynamic),比如可以将 String 连接在 JVM9+ 上编译为动态调用,为了和 java 保持最好的交互性,1.5.20 带来了下面的实验性支持:
-
支持在模块中调用 Java Lombok 生成的方法,支持的注解有:@With,@Data,@Getter,@Setter,@NoArgsConstructor,@RequiredArgsConstructor 和 @AllArgsConstructor
-
JSpecify 项目中包含了 java 的 nullness 注解,可以提供更多的 null 值信息,帮助 kotlin 保持 null safety,如下:
// JavaClass.java import org.jspecify.nullness.*; @NullMarked public class JavaClass { public String notNullableString() { return ""; } public @Nullable String nullableString() { return ""; } }
在 kotlin 中调用:
// Test.kt fun kotlinFun() = with(JavaClass()) { notNullableString().length // OK nullableString().length // Warning: receiver nullability mismatch }
Kotlin/Native
kotlin/native 编译器支持导出 KDoc 到 Objective-C 框架中,可以让调用者更好获得接口信息,当然也支持 swift 项目,不过暂时还是实验性的。
改进 Array.copyInto()
性能:得益于相关内存管理优化,获得了 20 倍的速度提升 。
Kotlin/JS
Kotlin 1.5 提供了新的 JVM IR 后端,之前唯一缺少的是稳定的 JS 支持,此次更新进一步加强 Kotlin/JS IR 后端稳定性。
迁移到新的 JS 后端的方法可以参考我们的迁移指南,里面包含了你需要的代码更改。如果您遇到任何问题,欢迎报告给我们。
Gradle
1.5.20 提供了一些工具性的提升:
- Gradle parallel execution mechanism 现在可以完全控制 kotlin 的并行执行任务了,以前的
kotlin.parallel.tasks.in.project property
将会弃用 - 我们改进了 kapt 中的注解处理器,加速 Gradle 中的运行速度
Standard library
kotlin 1.5.20 继续增强标准库中的字符处理,增加了新特性:
isLowerCase()/isUpperCase()
现在可以提供所有平台上一致的输出(大小写一致性),不仅仅只是英文字符的支持digitToInt()
支持到所有平台上的 Unicode 字符,先前只支持 kotlin/jvm
更多信息,查看官方博客:Kotlin 1.5.20 Released!