Kotlin 首席设计师 Michail Zarečenskij 近期接受 DevClass 采访,谈论了与该语言与 Java 的关系以及未来发展。
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 于 2011 年 7 月推出,并在 2012 年 2 月以 Apache 2 许可开源;2016 年 2 月 15 日,Kotlin v1.0(第一个官方稳定版本)发布;2017 Google I/O 大会, 宣布 Kotlin 已正式成为安卓开发官方支持开发语言。
Michail 介绍称,Kotlin 最初是作为 Java 的替代语言而出现,旨在解决一些局限性和问题,如 nullability story、check exceptions、invariant arrays 等。但多年发展下来,完全取代 Java 已经不再是 Kotlin 的目标。
“现在我们有了 Kotlin multiplatform story,我们可以针对多个平台,例如 iOS、Android 等。我们有 Kotlin Notebook;我们有 Compose,这是一个用 Kotlin 编写 UI 的框架;我们有 build.gradle.kts,可以使用 Kotlin 编写 Gradle 脚本;但 JVM 部分和 Java 对我们来说仍然非常非常重要,实际上至关重要。我们仍然希望能与 Java 实现互操作,因为我们完全明白 Java 将伴随我们很多年,我们不想完全取代 Java。这是不可能的,也不是我们的目标。”
Michail Zarečenskij
与此同时,他还在期待 Project Valhalla 的发布,“这样我们就可以采用此功能,并使其在 Kotlin 中更具表现力”。
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) 的官方实现。Michail 解释称,主要问题在于 LSP 的设计方式不允许 Java 和 Kotlin 之间进行通信。“我们的主要功能之一是互操作性,但是如果你从 Java 调用 Kotlin,则无法进入 Java LSP 并导航到 Kotlin LSP。因此,我们没有来自 JetBrains 的合适 LSP。”
此外,Michail 表示虽然大部分 Kotlin 的使用率仍源自 Android,但约有 40% 到 45% 的 Kotlin 用户正在编写服务器端应用,多平台的情况正在增长。接下来,Michail 预计 Kotlin 将新增大量新特性,“关键特性是不可变性和新的错误模型”。
评论删除后,数据将无法恢复
Kotlin 首席设计师:完全取代 Java 是不可能的
Kotlin 首席设计师 Michail Zarečenskij 近期接受 DevClass 采访,谈论了与该语言与 Java 的关系以及未来发展。
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 于 2011 年 7 月推出,并在 2012 年 2 月以 Apache 2 许可开源;2016 年 2 月 15 日,Kotlin v1.0(第一个官方稳定版本)发布;2017 Google I/O 大会, 宣布 Kotlin 已正式成为安卓开发官方支持开发语言。
Michail 介绍称,Kotlin 最初是作为 Java 的替代语言而出现,旨在解决一些局限性和问题,如 nullability story、check exceptions、invariant arrays 等。但多年发展下来,完全取代 Java 已经不再是 Kotlin 的目标。
Michail Zarečenskij
与此同时,他还在期待 Project Valhalla 的发布,“这样我们就可以采用此功能,并使其在 Kotlin 中更具表现力”。
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) 的官方实现。Michail 解释称,主要问题在于 LSP 的设计方式不允许 Java 和 Kotlin 之间进行通信。“我们的主要功能之一是互操作性,但是如果你从 Java 调用 Kotlin,则无法进入 Java LSP 并导航到 Kotlin LSP。因此,我们没有来自 JetBrains 的合适 LSP。”
此外,Michail 表示虽然大部分 Kotlin 的使用率仍源自 Android,但约有 40% 到 45% 的 Kotlin 用户正在编写服务器端应用,多平台的情况正在增长。接下来,Michail 预计 Kotlin 将新增大量新特性,“关键特性是不可变性和新的错误模型”。