大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

Kotlin 首席设计师访谈:Kotlin 与 Java 的差距有多大?

作者:Tim Anderson

  • 2024-12-30
    北京
  • 本文字数:1869 字

    阅读完需:约 6 分钟

Kotlin 首席设计师访谈:Kotlin 与  Java 的差距有多大?

Kotlin 语言由 JetBrains 开发,并在 Apache2.0 许可下 开源,于 2011 年开始作为 Java 在 JVM (Java 虚拟机)上运行的应用程序的替代品,但从那时起,它就已经发展成针对 JavaScript、移动平台、原生可执行文件和 WebAssembly 的语言了。


Kotlin 首席设计师 Michail Zarečenskij 向 DevClass 讲述了 Kotlin 与 Java 的关系以及该语言的未来。


他告诉我们:“Kotlin 语言是作为 Java 的替代品出现的,当时我们想解决 Java 的一些局限性和问题,比如可空性、检查异常、不变数组等。”。


他说:“多年来,Kotlin 不断发展,现在我们才有了 Kotlin 多平台的故事,我们可以针对多个平台,比如 iOS、安卓等,我们有了 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 最近实现了 虚拟线程,这是 Loom 项目的一部分,Kotlin 的协程也同样用于并发编程,这有什么影响?


“它们的目标略有不同,”Zarečenskij 说道。“Loom 项目仍然使用 Thread API。这是我们多年来一直使用的 API,具有所有的优点和缺点。在 Kotlin 中,我们有结构化并发,即协程之间的父子关系。因此,协程之间的通信、取消协程或当其中一个协程出现异常时处理错误更容易。如果你需要这种细粒度的并发,并且想编写一个新的应用程序,那么 Kotlin 协程可能会更好。”


他补充道,“Kotlin 协程的缺点之一是,如果你有一个挂起函数,它实际上在底层使用了 Thread API,我们仍然会使用物理线程。我们实际上想做的是为 Kotlin 协同程启用 Loom 项目,所以如果你必须使用线程,那么你将能够使用虚拟线程… 这样就可以两全其美了。”


由于谷歌将 Kotlin 作为安卓开发的首选语言,这推动了 Kotlin 的发展。这是 Kotlin 的主要用途吗?


“Kotlin 的大部分使用仍然是在安卓中,但大约有 40% 到 45% 的 Kotlin 用户正在编写服务器端应用程序。”Zarečenskij 解释道。“我们看到了正在增长的多平台故事。”


Kotlin 没有官方的 JetBrains 语言服务器协议(LSP)实现。非 JetBrains IDE(如 Visual Studio Code)使用它来在编辑器、调试等中启用智能编程语言支持。这是为了让开发人员留在 JetBrains IDE 家族系列中,还是将来会有所改变?


“LSP 的故事非常有趣,我认为在某种程度上,它对我们来说至关重要。”Zarečenskij 说道。“我们很想为 Kotlin 提供一个合适的 LSP,因为如果 Kotlin 可以在许多 IDE 上呈现并得到良好的支持,这对 Kotlin 来说是一个好处。但是,例如,LSP 的设计方式不允许在 Java 和 Kotlin 之间进行通信。我们的主要功能之一就是互操作性,但如果你从 Java 调用 Kotlin,就不可能进入 Java LSP 并导航到 Kotlin LSP。因此,我们没有来自 JetBrains 的合适 LSP。目前至少有两个开源实现,我看到开发这些实现的人正在开发一个新版本,该版本利用了 K2 API,因为它一个很好的 API 分析。


“我希望它能够流行起来,那么你将会拥有一个合适的 Kotlin LSP。但互操作性会存在问题。”


K2 是最近发布了新的 Kotlin 编译器 。


Kotlin 的下一步是什么?Zarečenskij 说道:“关键特性是不变性和新的错误模型。”。他预计会有大量的新语言特性。“因为 K2 已经完成,现在我们正在开发这种语言。”他还补充到。


原文链接:

https://devclass.com/2024/11/21/interview-with-kotlin-lead-designer-how-far-will-the-language-diverge-from-java/

2024-12-30 17:0014544

评论

发布
暂无评论

重新理解“软件工程”

Bruce Talk

软件工程

架构师训练营学习总结——第一周

文智

极客大学架构师训练营

采用docker相关测试

菜鸟小sailor 🐕

第一周作业

week01系统设计

xxx

Nacos如何实现服务自动注册

编号94530

spring nacos 源码阅读 spring cloud alibaba

架构师训练营第 1 期 - 第一周学习总结

Anyou Liu

架构师训练营第一周作业

吴传禹

极客大学架构师训练营

第三周作业

Jam

第六周作业

Jam

UML 练习

黄立

作业

第一周学习总结

架构师训练营:第一周学习总结

xs-geek

架构师训练营第 1 期 第一周 学习总结

KK_TTN

极客大学架构师训练营

第四周

Jam

oeasy 教您玩转 linux 之 010302 火狐浏览器 firefox

o

Spring事件执行流程源码分析

编号94530

spring Spring Cloud 源码阅读 事件监听

第三周总结

Jam

架构师训练营大作业一同城快递

Hanson

go runtime debug 小技巧

Gopher指北

debug 后端 runtime Go 语言

架构师训练营第一周学习感悟

吴传禹

极客大学架构师训练营

网络安全中的机器学习-恶意软件安装

计算机与AI

学习 网络安全

架构师训练营大作业

吴吴

只要我跑的够快,内卷它就卷不到我,一名高中生是如何做到在疫情下涨薪70%的?

程序员DMZ

面试 程序人生

第十三周作业

Jam

第十二周作业

Jam

食堂就餐卡系统设计

应鹏

极客大学架构师训练营

第一周学习总结

Geek_ac4080

架构师训练营第1期 第1周 作业1

KK_TTN

极客大学架构师训练营

第五周作业

Jam

架构方法--课后练习

Nick~毓

Kotlin 首席设计师访谈:Kotlin 与  Java 的差距有多大?_编程语言_InfoQ精选文章