Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,它可以被编译成为 JavaScript 源代码。虽然与 Java 语法并不兼容,但 Kotlin 可以和 Java 代码相互运作,并可以重复使用现有的 Java 类库。为了解 Kotlin 的更多相关信息,InfoQ 采访了 Kotlin 编译器团队成员 Svetlana Isakova,并希望通过本文为你带来一些关于 Kotlin 方面的启示。
InfoQ:为什么要开发 Kotlin 这门语言?开发一门语言需要考虑哪些因素?
Svetlana Isakova:主要的考量因素,包括这种语言由谁使用,他们又为何使用。在 Kotlin 刚刚诞生之时,人们强烈需要一种能够解决 Java 痛点(例如语法冗长以及可空性)等问题的面向 Java 平台的现代语言。Kotlin 很好地满足了这一需求,因此很多人现在倾向于选择 Kotlin 替代 Java。
如今,Kotlin 试图解决社区的另一大痛点:利用一种语言在不同平台之间共享代码。这种 Kotlin/ 多平台技术仍处于试验阶段,但通过观察有多少人在生产当中使用这项技术,我们得以确认这种需求相当强烈,我们也希望能够为此提供一套良好的实用解决方案。
另一项因素在于,编程语言需要拥有一家强大的公司作为后盾。JetBrains 是一家在全球范围内享有盛誉的成功企业,拥有丰富的相关专业知识。为多种不同语言(包括 Java、C#、Python、Ruby 以及 Go 等)创建 IDE,而 Kotlin 目前正是 JetBrains 的高优先级项目。目前,JetBrains 内部有一支 70 多人的团队,正在社区的帮助下推动 Kotlin 及其 IDE 支持工作。
InfoQ:在今年的 Google I/O 大会上,谷歌宣布 Kotlin 是安卓开发的首选语言,请您从 Kotlin 的语言特性上来说一下这是为什么?您认为谷歌这么做的原因有哪些?
Svetlana Isakova:这项公告旨在鼓励开发人员转向 Kotlin,同时也使得谷歌公司能够专注于优先为 Kotlin 开发面向 Android 库的新型 API。Kotlin 语言中的大部分功能都是为了与 Java 实现轻松互操作而设计的。但除此之外,通过运用 Kotlin 中的特定功能(例如带有接收者的 lambda 表达式以及运算符重载等 DSL 创建功能,以及协程等),Kotlin 优先型 API 将带来更强大的表达能力与功能水平。
InfoQ:Kotlin 的目标是实现多平台可用,这对前端开发者实现跨端开发带来了哪些影响和变化?
Svetlana Isakova:最大的变化当然是在多种平台之间共享代码!这是开发者社区长期以来的持续需求,具体涵盖移动开发(在 Android 与 iOS 应用程序之间共享代码)以及 Web 开发(在后端与前端之间共享代码)。
Kotlin 多平台方案与其它现有解决方案(例如 Flutter、React Native 或者 Xamarin)之间最大的区别,在于前者可以改变需要共享的部件。我们并不需要对整个应用程序进行共享,有时候只需要保证其中部分组件——例如 UI 逻辑——具有平台中立性即可。Kotlin 方案提供理想的灵活性,所共享逻辑的百分比可以随时间变化,并根据您的实际需求调整。以往,如果有人最初选择 React Native,但之后决定转向 Kotlin 及 Swift 等原生语言,则需要从零开始重写整个应用程序。但使用 Kotlin/ 多平台则不会出现这样的问题:其中某些部分已经使用 Kotlin 及 Swift 编写,且具体需要共享的部分可以轻松完成修改。
再来看 Web 开发,在这方面多平台 Kotlin 项目主要针对那些需要同时编写前端与后端代码,但又更希望只使用同一种语言的开发者。在不同语言的上下文之间来回切换非常麻烦,Kotlin 则很好地解决了这个问题。
InfoQ:跨端框架 Flutter 使开发者可以使用 Dart 语言开发安卓 App,这会对 Kotlin 造成冲击吗?您怎么看待这件事呢?
Svetlana Isakova:对我来说,Flutter 仍将在其小众市场中得到应用,其中 React Native 是最主要的用例:大家能够在短时间内创建出小巧简单,但又外观漂亮的应用程序。此外,当应用程序的大小不太重要,且没有后续开发计划的情况时(例如会务类应用程序),那么熟悉 Web 框架但又不怎么了解 Kotlin 或者 Swift 的开发者,确实更适合选择 Flutter。
但在我看来,如果大家关注应用程序的逻辑,那么不妨仅在 UI 部分使用 Flutter,并选择 Kotlin/ 多平台直接编写业务逻辑部分。接下来,大家可以轻松从 Flutter 迁移至 Swift 及 Kotlin 等原生语言。例如,当初创企业获得成功,那么接下来对应用程序的使用需求就会不断增长。
我觉得 Kotlin 并不会受到 Dart 的太多影响,因为 Kotlin 是一种更丰富且表达能力更强的语言。不过在 Android 平台上,我们构建 UI(特别是 Jetpack Compose)的方式确实受到了 Flutter 的影响。Flutter 为移动开发带来新的标准,例如用于 UI 组件的热重载与响应式声明方法等。我希望 Flutter 能够影响并最终改善整个 Android 平台。这其实也是技术快速发展,以及不同技术之间相互影响的一大明证,我觉得是好事。
InfoQ:最近,Kotlin 1.3.50 发布了,请您讲下新版本主要有哪些新特性?
Svetlana Isakova:这次的小版本更新带来了一系列质量与工具层面的改进,同时也在语言和库当中提供不少预览性质的实验性功能。这一次,最大的改进来自 Java 到 Kotlin 转换器(我们的目标是最大限度减少使用转换器之后,需要修复的红色提示代码量,这里推荐大家亲自试一试),以及新的周期与时间测量 API。Kotlin/JS 正在积极开发当中;新版本还提供 Dukat 预览,这款新的自动转换器能够将 TypeScript 声明文件转换为 Kotlin 外部声明。Kotlin/Native 代码现在可以使用特殊插件进行调试了。感兴趣的朋友可以在我们的博文当中了解更多详情。
InfoQ:Kotlin 计划添加哪些利于开发者开发的新库?
Svetlana Isakova:我们并没有打算所有的库都由 JetBrains 实现。很多库都是由社区负责实现与支持的。但在这里,我可以强调 Kotlin 团队正在进行的几个研究方向:
用于支持多种不同格式的多平台序列化库。由于其不使用 reflection,因而速度很快。
持续开发,代表基于挂起的响应式流(reactive stream)的流(Flow),目前已经加入稳定版本。
InfoQ:Kotlin 1.4 版本有什么计划?大约在什么时间发布?
Svetlana Isakova:1.4 版本将在明年发布。其中没什么特别的惊喜。大家可以关注新功能的后续进展,它们基本上都已经在本次小版本升级中提供实验预览版。我们正在努力改善整体用户体验,确保编译器与其它工具顺畅运作。很明显,MPP 是个需要优先解决的问题。
InfoQ:Kotlin/Native 的后续计划有哪些?您是否有意引入 self-host 机制?另外,JetBrains 是否有计划推广 Kotlin/Native?
Svetlana Isakova:我们目前的关注重点,仍然是开发出完整而且稳定的 Kotlin/ 多平台方案。其次,则是提高 Kotlin/Native 的编译性能。
Self-host(也就是在一种语言中使用另一种语言编写代码)目前还不是优先事务,因为除了作为“一般性概念验证”之外,这种功能不会给最终用户带来明显的助益。Kotlin/Native 代码可以复用 Kotlin 编译器的代码,其主要由 Kotlin/JVM 编写而成。
虽然尚处于预览版本,但很多人已经开始使用 Kotlin/Native 以及 Kotlin/ 多平台。当然,我们希望看到越来越多的用户在未来的实际场景当中享受两者带来的助益。
InfoQ:请问 Kotlin 在 WebAssembly 支持方面有什么规划?我看到 Kotlin 的版本库最近提交了将 WebAssembly 直接作为编译器后端的代码。
Svetlana Isakova:你观察得很细!长久以来,我们一直打算让 Kotlin/Native 支持 WebAssembly 编译。现在,我们打算直接从 Kotlin/JS 编译器中实现 WebAssembly,而不再使用 LLVM 作为转换载体。这套方案能够大大简化整个开发流程。到目前为止,我还没法做出太多承诺,但我们确实在积极进行探索。
InfoQ:Kotlin 在今年 7 月份的 O’Reilly OSCON(O’Reilly 开源软件大会)上获得年度突围项目奖。作为 Kotlin 的布道师,您有什么感想?
Svetlana Isakova:这是一项重要的荣誉,我对此感到非常高兴。如果没有背后强大的社区,这一切根本不可能实现。我要向各位成员表示由衷感谢!
InfoQ:为了推广 Kotlin,Kotlin 中文社区都做了哪些努力呢?
贾彦伟:Kotlin 中文社区目前维护有与官网风格一致的中文站、中文博客、中文论坛。其中,Kotlin 中文站是官方英文站的中文翻译版,很多开发者通过中文站来学习 Kotlin。目前 Kotlin 中文站每月有 120 万次用户访问。社区另一个影响力很大的是 Kotlin 公众号,会经常发布高质量的社区原创文章,目前已被 1 万多用户订阅。中文社区在知乎、掘金等技术社区也有开设账号,同步社区优质内容。除了这些线上资源外,Kotlin 中文社区还在北京、成都等地多次举办线下活动。
采访嘉宾介绍:
Svetlana Isakova:Svetlana Isakova 最初是 Kotlin 编译器团队成员,现在她是 JetBrains 技术布道师。她教授 Kotlin 语言,并在世界各地的会议上演讲,她也是《Kotlin in Action》一书的合著者。
贾彦伟:多年互联网研发从业者,关注编程、架构、技术管理、培训、开源等领域。Kotlin 中文站与 Ktor 中文站负责人。曾在 JetBrains 北京开发者日做过技术分享。
评论