QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

评论

发布
暂无评论

数据预处理和特征工程-数据预处理-编码与哑变量 & 二值化与分段

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

深入理解Metrics(五):Timers

冰心的小屋

Java metrics Timers

Java 函数式编程

Ayue、

函数式编程

深入理解JS作用域链与执行上下文

loveX001

JavaScript

云原生可观测套件:构建无处不在的可观测基础设施

阿里巴巴云原生

阿里云 云原生 可观测

谈谈企业级前端应用 UI 界面增强实现的一些实际案例

汪子熙

angular web开发 SAP Hybris 11月月更

上新丨Kyligence Zen 上线海量指标模板,轻松变身指标达人

Kyligence

数据分析 指标管理 指标中台

带你了解NLP的词嵌入

华为云开发者联盟

人工智能 自然语言处理 华为云 企业号十月 PK 榜

2022前端笔试题总结

loveX001

JavaScript

前端面试指南之JS面试题总结

loveX001

JavaScript

自动化工具如何助力企业落地DevOps?

飞算JavaAI开发助手

Java中的ArrayList类基础使用

共饮一杯无

Java ArrayList 11月月更

谈谈企业级前端应用中通过 CSS 达到布局定制化的话题

汪子熙

angular web开发 SAP Fiori 11月月更

【LeetCode】交替合并字符串Java题解

Albert

算法 LeetCode 11月月更

VUE3+TS学习-项目搭建

肥晨

Vue3 脚手架 11月月更

共筑行业标准,亚信科技AntDB数据库参与多项数据库行业标准研讨会

亚信AntDB数据库

AntDB aisware antdb AntDB数据库

带你从0到1开发AI图像分类应用

华为云开发者联盟

人工智能 华为云 图像分类 企业号十月 PK 榜

天翼云打造自研云操作系统TeleCloudOS4.0 推动算力蓬勃发展

极客天地

DevOps工具链的国产化之道

嘉为蓝鲸

DevOps 运维 IT

焱融全闪系列科普|固态存储核心技术 SSD

焱融科技

云计算 分布式 高性能 文件存储 全闪存储

Dive into TensorFlow系列(1)-静态图运行原理

京东科技开发者

人工智能 机器学习 tensorflow 动态图 静态图

来自2年前端的面经

loveX001

JavaScript

2022年11月中国数据库排行榜:GaussDB获认证进前五,GBase得融资竞逐鹿

墨天轮

数据库 opengauss TiDB 国产数据库 KingBase

Curve 文件存储:如何支撑百亿级文件?

网易数帆

文件存储 分布式存储 云原生存储 curve 企业号十月 PK 榜

kubespray2.11安装kubernetes1.15

程序员欣宸

Kubernetes 11月月更 安装k8s

基于CSS mask和clip-path实现切角的技巧

南城FE

CSS css3 前端

CSS 边框也能动画?background-origin 和 -clip 来施加魔法~

掘金安东尼

CSS 11月月更

服务网格:管理对外部服务的访问

Flomesh

微服务 Service Mesh 服务网格 程序员、

vue2双向绑定原理:深入响应式原理defineProperty、watcher、get、set

肥晨

11月月更 vue响应式 响应式开发

如何使用netlify部署vue应用程序

肥晨

11月月更 网站托管 netlift

被老板忽悠入局后,我如何在三年内让产品「起死回生」?

LigaAI

产品经理 产品管理 产品管理成功秘诀 产品负责人 企业号十月PK榜

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