Kotlin 首席设计师米哈伊尔·扎列琴斯基(Michail Zarečenskij)
Kotlin 语言是由 JetBrains 开发,依据 Apache2.0 许可开源,于 2011 年问世,作为在 JVM(Java 虚拟机)上运行的应用程序的 Java 替代品。从那时候起,已经发展到针对 JavaScript、移动平台、本机可执行文件和 Web 程序包。
Kotlin 首席设计师米哈伊尔·扎列琴斯基最近谈论了与 Java 的关系以及该语言的未来。
“Kotlin 语言是作为 Java 的替代品出现的,当时我们想解决它的一些限制和问题,例如可空性问题、检查异常、不变数组等等,”他告诉我们。
“多年来,Kotlin 不断发展,现在我们有了 Kotlin 多平台的故事,我们可以针对多个平台,例如 iOS、Android 等,我们有 Kotlin Notebook,我们有 Compose,这是一个用 Kotlin 编写 UI 的框架,我们还有 build.gradle.kts,可以使用 Kotlin 编写 Gradle 脚本,但 JVM 部分和 Java 对我们来说仍然非常非常重要,实际上至关重要。我们仍然希望与 Java 互操作,因为我们完全明白 Java 将伴随我们很多年,我们不想完全取代 Java。这是不可能的,也不是我们的目标,”他如此说道。
在某些情况下,Kotlin 正在等待 Java 或 JVM 功能的实现。
“如果 Java 能够尽快发布 Valhalla 项目,我会很高兴,因为所有 JVM 用户都将从中受益,”他如此说道。
值得一提的是,Valhalla 项目 将为 JVM 带来值类型还有更多功能。
“Vahalla 项目和值类与 Kotlin 的结合非常好,因为许多应用程序都与数学有关,”Zarečenskij 说道。它还可能使 Kotlin 能够实现运算符重载,这样“您就不必再写 .plus,而实际上要写 +”或其他标准符号。“这正是 Kotlin 语言的闪光点,因此我们渴望在 JVM 上看到值类型,这样我们就可以采用此功能,并使其在 Kotlin 中更加具有表现力,”米哈伊尔说道。
Kotlin 团队是否与开发 Java 语言的委员会合作?“这真的取决于功能,”Zarečenskij 告诉我们。“我们进行沟通,并密切关注值类之类的东西,因为它主要是 JVM 功能……我们必须调整它的一些设计并注意设计决策,以便 JVM 也能成功地为 Kotlin 优化值类。”
Java 最近实现了虚拟线程,这是 Project Loom 的一部分,这对于同样用于并发编程的 Kotlin 协程有何影响?
“他们的目标略有不同,”米哈伊尔这样说。“Project Loom 仍然使用 Thread API。这是我们多年来一直使用的 API,具有所有优点和缺点。在 Kotlin 中,我们有结构化的并发性,即协程之间的父子关系。因此它们之间更容易通信、或取消它们或者在其中一个协程出现异常时处理错误。如果你有这种细粒度的并发性并且想要编写一个新应用程序,那么 Kotlin 协程可能会更加好用。”
他还补充道:“Kotlin 协程的一个缺点是,如果你有一个挂起函数,而该函数实际上在后台使用了 Thread API,那么我们仍然会使用物理线程。我们真正想要做的是为 Kotlin 协程启用 Project Loom,这样如果你必须使用 Threads,那么你将能够使用虚拟线程……这样你就可以两全其美了。”
谷歌将 Kotlin 选为 Android 开发的主语言,这推动了 Kotlin 的发展。这是否解释了 Kotlin 的大部分使用情况?
“大多数用户仍在 Android 上,但约有 40% 至 45% 的 Kotlin 用户正在编写服务器端应用程序,”米哈伊尔说道。“而且我们看到多平台故事正在不断发展。”
JetBrains 没有为 Kotlin 提供语言服务器协议 (LSP) 的官方实现。非 JetBrains IDE(例如 Visual Studio Code)使用它来在编辑器、调试等中启用智能编程语言支持。
这是为了让开发人员留在 JetBrains 系列 IDE 中,还是将来会发生变化?
“LSP 的故事非常有趣,我认为,在某种程度上,它会成为我们必不可少的一部分,”米哈伊尔说道。“我们非常希望有一款适合 Kotlin 的 LSP,因为如果 Kotlin 可以在许多 IDE 上得到良好的支持,那么这对 Kotlin 来说就是一大福音。但是 LSP 的设计方式不允许 Java 和 Kotlin 之间进行通信。我们的主要功能之一是互操作性,但是如果您从 Java 调用 Kotlin,则无法进入 Java LSP 并导航到 Kotlin LSP。因此,我们没有来自 JetBrains 的合适 LSP。开源中至少有两种实现,我看到开发这些实现的人开始着手开发一个将利用 K2 API 的新版本,因为它有一个很好的分析 API。
“我希望它能够成功,并且您将拥有一个合适的 Kotlin LSP。但互操作性方面会存在问题。”
K2 是最近发布的Kotlin新型编译器。
Kotlin 的下一步将是什么?
“关键特性是不变性和新的错误模型”,米哈伊尔说。他补充说,他预计在下一版本会有大量的新语言特性,“因为 K2 已经完成,现在我们正在研究这种语言。”
更多该语言的信息将在定于 2025 年 5 月在哥本哈根举行的新一届 KotlinConf 上揭晓。
作者:场长
相关阅读: