不知不觉,Kotlin语言都十年了

发布于 2021-09-04 14:22 ,所属分类:软件编程学习资料

不知不觉,Kotlin 语言都诞生十年了。我是在 2017 年开始到这门语言的,那一年谷歌 I / O 大会上,谷歌宣布将 Kotlin 作为安卓开发的官方编程语言。

Kotlin 不仅仅可以用于 Android 应用开发,它简洁和表现力强的代码,与 Java 完全兼容和平滑的学习曲线,足以让程序员选择 Kotlin 在服务器端编程。同时,Kotlin 还可以用来开发前端 React 应用,真的是多个平台通吃。

今天早上,我看了一篇写 Kotlin 十年的文章,觉得不错,做了翻译和修改,贡献给大家(英文链接在里)。另外,明天早上 9 点 30 分我们会连麦阿里研究员玉伯,和他聊聊他的成长之路,以及前端的新趋势。如果你感兴趣,记得预约。

2011 年 7 月 19 日,JetBrains 发布了一门新的 JVM 静态类型编程语言:Kotlin。一开始,大家只是把 Kotlin 当成 Java 的替代品,而十年之后,Kotlin 俨然已经长出了一套完整的生态系统,开发者可以利用它为各类项目编写代码,包括服务器端、客户端、Web、数据科学、多平台项目、机器学习等等。

Kotlin 始于一个简单的想法:创建一套平台,让开发过程变得更有趣。而从 JetBrains 的内部初创项目到现在的成熟编程语言,Kotlin 也面对了成长中必经的风风雨雨。

JetBrains 公司表示,每当需要对技术的未来方向做出决策时,他们都会从社区的投入当中寻找答案。Kotlin 团队指出,“过去十年以来,Kotlin 已经根据全球成千上万 Kotlin 用户的反馈,积累下数百万次变更调整。”

Kotlin 诞生的故事

JetBrains 公司 CEO Maxim Shafirov 回忆道,这一切就挺偶然的。概括起来,就是当时的联合创始人兼 CEO Sergey Dmitriev 有一天突然问大家,“伙计们,你们觉得 JetBrains 能不能做点引人注目而且有益于社区的大事?

在软件工程师出身的 Dmitry Jemerov 看来,开发厂商能为社区做的最大贡献就是提供一种新的编程语言。Jemerov 表示,“当时我的想法是,JetBrains 是一家专门为其他企业、语言、框架等技术方案构建工具的厂商。

所以我希望能让 JetBrains 在社区里拥有更大的影响力。比如说,我们该怎么做一点只属于自己技术成果的工作,而不再单纯为其他人的技术提供支持。”

更重要的是,他们在为其他语言提供支持方面确实拥有丰富的经验,已经先后面向 Java、JavaScript、Ruby、Python、PHP 以及 Scala 等开发过配套工具。凭借深厚的积累,JetBrains 团队在 2010 年正式决定构建自己的编程语言

Jemerov 记得很清楚,“决定一出,大伙都乐了。编程语言,真的假的?”那时候他们还只是一家小公司,虽然确实也做出几个成功的项目,例如 IntelliJ IDEA 与 ReSharper,但这跟编程语言并不在同一个量级之上。

Jemerov 表示,“但话语一出,大家心里的种子就已经埋下。我们开始思考,毕竟我们对很多编程语言都有着实际而深刻的理解。我们已经成功实现了对 20 多种编程语言的支持,也清楚它们各有什么优缺点。

所以我们应该可以把好的、实用的部分结合起来,打造一款更受欢迎的语言。”这就是 Kotlin 项目的起点,一种用于 JVM 的静态类型编程语言。

JetBrains 公司 Kotlin 编程语言项目前负责人 Andrey Breslav 表示,“在我第一次听说要开发一种新的 JVM 通用语言时,我觉得这事真的没什么意义。当时已经有很好的语言选项了,Scala 就非常强大,我特别喜欢。

我觉得 JVM 上已经存在的一切问题都在某种程度上被 Scala 解决掉了。所以我当时想,真的没必要费这个劲。用 Scala 就行了,完全够用了。”

但讨论并没有因此结束,Breslav 自己也开始逐渐意识到还有很多尚未解决的问题。而且从 JetBrains 的角度来看,他们完全有能力推出一种定位准确且具有足够吸引力、度和用户支持度的新语言。Breslav 提到,“所以虽然我还是觉得这个想法有点疯狂,但其中也有那么点道理。我们确实有机会搞点大动静。”

最初,JetBrains 将这款编程语言命名为“Jet”。但由于商标问题,他们不得不另寻方案。Breslav 回忆道,“我们想了很久,但感觉都不满意。起名字真的挺难。”

不久之后,Jemerov 想到了“Kotlin”,是美国圣彼得斯堡周边一处岛屿的名字。这似乎是受到了 Java(咖啡岛)与 Ceylon(茶岛)等其他语言名称的启发。“名字跟岛相关的语言都发展得不错,而且 Kotlin 就在我们旁边,这主意好。”

2011 年,JetBrains 在圣克拉拉甲骨文园区召开的 JVM 语言峰会上首次公布了 Kotlin 项目。从那时起,Kotlin 就一直是开发者生态系统的代名词,而且始终在不断发展。

过去 12 个月来,超过 480 万开发人员使用 Kotlin 进行着服务器端、移动跨平台、Android 以及前端开发。除此之外,全球共有约 194 个 Kotlin 用户群,全球前二百强高校中有 45 所都在教授 Kotlin 开发知识。

最近,Kotlin 1.5 宣布支持新的默认的 JVM IR 编译器。这也是一个重大特性。

Kotlin 未来的规划

对于 Kotlin 的未来,JetBrains 公司 Kotlin 编程语言项目负责人 Roman Elizarov 也分享了自己的看法。下面内容翻译自他的视频。

未来十年,我们还有很多工作要做。首先,我们要坚定地将 Kotlin 确立为一种多平台语言。在我看来,我们实际上已经完成了多平台方面的工作,包括对多种不同平台的基础设施构建与稳定支持。

从某种意义上说,我们的愿景是构建起自己的 Kotlin 生态系统,该系统将由运行在多个平台上的跨平台 Kotlin-first 库组成,共同为开发人员提供广泛的抽象与实用程序。如大家所见,我们在这项宏伟目标上才刚刚起步。现在,我们仍在开发相关工具,希望能让 Kotlin 社区更轻松地为这套庞大的 Kotlin 生态系统构建与特定领域相关的成果。

除了多平台语言这一基本特性,Roman 也还提到了以下一些新想法。

1、结构化数据操作

我们目前的一大研究重点,在于如何处理非结构化、甚至是无类型的数据。这一点有着非常广泛且深远的意义。首先,这对需要处理大量数据的数据科学家非常重要。此外,这对编写测试同样非常重要,因为开发者必须能够以轻松的方式使用不同数据类型实现测试的参数化。我们希望让开发者更轻松地处理统一的数据概念,包括定义数据、集合文字、在源代码中定义数据等等。我们正在认真考虑如何以简单方式快速引入数据,再通过后续解构对数据进行模式匹配。数据处理已经成为很多用户日常工作中的重要组成部分,我们必须给予必要的。

2、不可变性

与数据相关的另一个大方向,在于不可变性。Kotlin 不具备原生形式的可变与不可变数据处理能力,大家从语言中的 while 和 where 等关键字上就能看出 Kotlin 是把这两类数据看成同一种东西。但对于某些高性能应用,大家必须要明确使用可变数据。而对于其他一些应用,特别是在性能空间较大、但安全性至关重要的情况下,不可变数据会提供一种更安全的代码编写方法,确保代码不会因意外将可变数据共享给其他线程之类的问题而引发安全隐患。我们看到现代开发场景中,人们正越来越多地利用数据的不可变性,避免在代码中处理可变数据。我们也在研究如何通过长远规划改进 Kotlin 语言对可变数据的处理效果。

3、元编程

Kotlin 的另一大优势在于元编程。Kotlin 在内联函数方面拥有坚实的基础,您可以通过内联函数以低成本、高效率的方式定义各种用于迭代、数据结构操作的 DSL。但这仍然只是一种非常简单的元编程机制,我们也观察到很多需要使用更复杂抽象逻辑的用例,人们希望能在自己的应用程序编译过程中使用编译时、定义新符号、并对代码执行某些操作。这是我们的另一个重要发展方向,既要扩展内部类的功能,又要提供为 Kotlin 编译器编写自定义编译器插件的能力,这样才能真正让开发人员随心所欲地操控自己的代码。因此,在努力构建新的结构组件时,我们希望能在接下来这十年中为稳定的编译器 API 打好发展基础。这样,您就可以根据实际业务领域编写特定解决方案。希望大家可以把编译器当成库来使用,这样工具就不再只是工具、而是能够作为基础实现灵活定义的商业化特定领域解决方案库。

4、面向上下文的编程与更多静态类型

我们的其他一些研究方向则继续与 Kotlin 的原始设计保持一致。Kotlin 是一种静态类型语言。选择静态类型是有两方面考量:其一,静态类型具有更好的工具兼容性,能让工具更轻松地服务于代码;另外一个原因,则是静态类型拥有更好的规模化能力。对于典型的工业规模项目,其中的代码量越大、涉及的属性和其他元素就越多。在 Kotlin 中,我们可以在编译时执行静态检查,保证这样一大堆代码具备有效性、可维护性、可支持性,并尽可能减少错误。Kotlin 在十年之前就通过 typesafe 的可空机制提高了安全标准。我们目前正在研究其他值得改进的方向,希望能在未来提升更好的类型安全保障。另外,我们还在考虑扩展 contract 工具和语言本体,并将 union 及 intersection 等类型纳入支持范围之内。这样,我们就能在类型系统中表达更多代码属性,并在无需编写大量样板的前提下对各种类型进行协调操作。

5、改善 Kotlin 学习体验

纵观 Kotlin 的整个发展历程,我们发现了一个有趣的现象:在设计一种语言时,越是考虑到专业人士编写庞大代码项目的需求,这种语言最终就越是适合初学者快速上手。这话听起来似乎自相矛盾,毕竟很多人觉得专业工具就是要很专业、很困难,里面弯弯绕绕很多,只有专家才能顺利掌握。

但这实际是一种误解。对于编程语言这种典型的专业工具,在尝试降低专业人士的理解与使用门槛时,我们实际上就是在做简化。我们会可用性、人们最常使用哪些功能,并确保它的语法要清晰易懂。至于人们很少使用的功能,我们会给它们起个好记上口的名字,这样即使遇到的频率不高、大家也能想起它到底是干什么用的。事实证明,一流语言都会遵循这样的原则。在学习体验方面,我们的工作就是通过改进让人们更轻松地编写出简短的测试与函数成果,让初学者通过简短的代码片段克服对新语言的恐惧。

很多面向初学者的计算机科学教育工作者对 Kotlin 简直一见钟情,因为它特别容易上手、也不难教会学员。现在,我们也在朝这个方向积极努力,主动与 Kotlin 教师们沟通,并联合出版商推出更多 Kotlin 学习资料。我们还计划编撰更多面向初学者的语言学习书籍。大家可能都听说过由 Bruce Eckel 和 Svetlana Isakova 合著的《Atomic Kotlin》,未来还会有更多类似的优秀教程。总之我们正在努力,请大家拭目以待。

6、多平台生态系统

未来十年, Kotlin 将不仅仅是一种编程语言——它将是一套由库和工具组成的多平台生态系统,可帮助人们在各个领域编写代码,涵盖数据科学、游戏、移动应用、桌面、Web 乃至一切!这就是我们为 Kotlin 设立的未来十年发展目标。

周六,9 月 4 日,早上 9 点 30 分,我会在视频号连麦玉伯。所有关于前端以及成长的问题,你都可以问他。这大概率会是他今年的唯一一次直播。

相关资源