Kotlin 首席设计师 Michail Zarečenskij 近期接受 DevClass 采访,谈论了与该语言与 Java 的关系以及未来发展。Kotlin 是基于 JVM 的静态类型编程语言,由 JetBrains 于 2011 年 7 月推出,并在 2012 年 2 月以 Apache 2.0 License 开源;2016 年 2 月 15 日,Kotlin v1.0(第一个官方稳定版本)发布。
2017 Google I/O 大会上,谷歌宣布:官方正式支持将 Kotlin 作为 Android 开发的 First-Class(一等公民)语言。
自此,Kotlin 开发商 JetBrains 和谷歌一直围绕 Kotlin 进行紧密合作,并共同创立了 Kotlin 基金会。
Michail 介绍称,Kotlin 最初是作为 Java 的替代语言而出现,旨在解决一些局限性和问题,如空值处理、异常检测、不可变数组等。
但多年发展下来,完全取代 Java 已经不再是 Kotlin 的目标。
“现在我们提供了 Kotlin Multiplatform (KMP),支持 iOS、Android 等多平台共用一套 Kotlin 代码。
我们还开发了 Kotlin Notebook 和 Compose Multiplatform,后者是一个用 Kotlin 编写 UI 的框架。
我们还创建了 build.gradle.kts,支持使用 Kotlin 编写 Gradle 脚本;但 JVM 部分和 Java 对我们来说仍然非常非常重要,实际上至关重要。
我们仍然希望能与 Java 实现互操作,因为我们完全明白 Java 将伴随我们很多年,我们并不是要完全取代 Java。这是不可能的,也不是我们的目标。”
Michail Zarečenskij
与此同时,他还在期待 Project Valhalla 的发布,“这样我们就可以采用此功能,并使其在 Kotlin 中更具表现力。”
Project Valhalla 将为 JVM 带来值类型 (Value Types) 和其他更多功能。
Project Valhalla 正在用值对象增强 Java 对象模型,将面向对象编程的抽象与简单基元的性能特性结合起来。对 Java 泛型的补充修改将把这些性能增益带入泛型 API 中。
关于 Kotlin 团队是否会与开发 Java 语言的委员会合作,Michail 表示,主要取决于功能。
“我们会沟通,并密切关注 Value Classes 相关的特性,因为它主要是 JVM 功能…… 我们必须调整它的一些设计并注意设计决策,以便 JVM 也能成功地为 Kotlin 优化 Value Classes。”
在被问及 Java 实现虚拟线程(Project Loom 的一部分)的举措对 Kotlin 的 coroutines(同样用于并发编程)有什么影响时?Michail 则回答称,双方目标略有不同。
“Project Loom 仍然使用 Thread API。这是我们多年来一直使用的 API,有优点也有缺点。
在 Kotlin 中,我们具有结构化的并发性,协程之间具有父子关系。因此,如果其中一个出现异常,在它们之间进行通信、取消它们或处理错误都会变得更容易。
如果你有这种细粒度的并发性并且想要编写一个新应用程序,那么 Kotlin 协程可能会更好。”
不过他也没避及 Kotlin 协程的缺点。
“如果你有一个挂起函数,而该函数实际上在后台使用了 Thread API,那么我们仍然会使用物理线程。
我们真正想要做的是为 Kotlin 协程启用 Project Loom,这样如果你必须使用 Threads,那么你将能够使用虚拟线程…… 这样你就可以两全其美了。”
值得一提的是,JetBrains 尚未为 Kotlin 提供语言服务器协议 (LSP, Language Server Protocol) 的官方实现。
Michail 解释称,主要问题在于 LSP 的设计方式不允许 Java 和 Kotlin 之间进行通信。“我们的主要功能之一是互操作性,但是如果你从 Java 调用 Kotlin,则无法进入 Java LSP 并导航到 Kotlin LSP。因此,我们没有来自 JetBrains 的标准 LSP。”
此外,Michail 表示虽然大部分 Kotlin 的使用率仍源自 Android 开发,但约有 40% 到 45% 的 Kotlin 用户正在编写服务器端应用,多平台的使用情况正在增长。
接下来,Michail 预计 Kotlin 将新增大量新特性,“关键特性是不可变性和新的错误模型。”
https://devclass.com/2024/11/21/interview-with-kotlin-lead-designer-how-far-will-the-language-diverge-from-java/
延伸阅读
Kotlin声明式UI框架Compose Multiplatform支持iOS