写点什么

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:0014108

评论

发布
暂无评论

2020的另一面:5G的斯普特尼克之年

脑极体

玛雅公约软件系统开发|玛雅公约APP开发

系统开发

性能优化练习

Mars

LeetCode题解:22. 括号生成,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

陪你手撕源码系列之 STL set 相关算法

herongwei

c++ 算法 set stl

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

好吃不贵

极客大学架构师训练营

第八周总结

孤星

架构师训练营第八周作业

丁乐洪

架构师训练营 1 期第 12 周:数据应用(一)- 作业

piercebn

极客大学架构师训练营

第八周作业

孤星

一只支持凡尔赛文学创作的摄影手机

脑极体

可能会重塑未来移动支付市场的格局

CECBC

货币

FFmpeg使用基础(音视频开发入门)

赖猫

【第十二周】课后作业

云龙

架构师训练营第 1 期 - 第 12 周课后练习

Anyou Liu

极客大学架构师训练营

第十二周作业(作业一)

Geek_83908e

架构师一期

数字人民币红包迎战“双十二” 六大行钱包全接入

CECBC

数字人民币

架构师训练营 2 期 - 第 8 周命题作业

Geek_no_one

极客大学架构师训练营

架构之书:雄心与《C++语言的设计与演化》

lidaobing

c++ 架构

架构师训练营 2 期 - 第八周总结

Geek_no_one

极客大学架构师训练营

性能优化总结二

Mars

生产环境全链路压测建设历程之七: 淘宝网2012年双十一库存超卖问题的本质

数列科技杨德华

命令行搜索神器fzf

Rayjun

Linux

架构师训练营第三周”代码重构“作业

随秋

极客大学架构师训练营

架构师训练营 第八周作业

文江

《社会中的数据可视化》PDF免费下载

计算机与AI

数据可视化

Codurance不太一样

sherlockq

架构师系列9: 找出单向链表合并节点

桃花原记

推进工业互联网和区块链创新发展

CECBC

区块链 互联网

第十二周作业(作业二)

Geek_83908e

架构师一期

宝马区块链负责人:我们是如何让区块链技术与汽车产业结合的?

CECBC

大数据

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