点击“开发者技术前线”,选择“星标”
在看|星标|留言, 真爱
关联:
作者:Zan McQuade & Amanda Quinn
SegmentFault 编译:徐九
如今的开发者倾向于使用新的编程语言,但旧的编程语言又如何呢?它们的未来一般只有两种:仍然可用但逐渐失去人气;或者彻底消亡。此前,我们在《5 种已死的编程语言》中,结合之前 5 种濒临消亡的编程语言,预测并统计了以下永生的编程语言。
这份盘点与分析是由多位编程大神整理的,里面囊括了他们对一些经典编程语言和新兴编程语言的不少思考,以及基于行业的分析。
Python
今年关于 Python 的最大新闻莫过于 Python 之父 Guido van Rossum 正式退休,将 Python 移交给 Python 指导委员会。到目前为止,这次权力移交并没有出现“阵痛”,这很正常,正如《Python Crash Course》的作者 Eric Matthes 所认为的那样,因为“Guido 仍然会在社区中长期保持自己的角色”。此外,对 Python 2.7 的支持将于 2020 年终止,这很可能会让坚持使用 Python 2.7 的人非常不舒服。
无论如何,Python 仍然是数据科学的首选语言。
对于 Matthes 来说,Python 令人兴奋的方面之一是“这个经过长期精心建设的社区中涌现出各种有趣且关键的项目。” Python 指导委员会成员和 CPython 核心开发人员 Carol Willing 也对这些项目表示赞赏,例如 Binder 服务,它通过在 Jupyter Notebooks 中创建可执行环境来促进可重复的研究,尤其是当它们超出其原始目标时。
她指出,“去年,Binder 在许多 Python 会议上被广泛用于讲习班和教程。” Willing 还对 CircuitPython 和 Mu 项目大加赞赏,问道:“谁不喜欢硬件?闪烁的 LED、传感器以及使用 Mu 的用户友好型编辑器对成人和儿童都非常有用。”
Java
今年对 Java 来说,好消息居多。“再说一次,Java 消亡的谣言只不过是该平台批评者的一厢情愿,”Ben Evans 解释道。
但事情并非一帆风顺。正如我们去年指出的那样,Java 11 于 2018 年 9 月发布,带来了许多新功能,包括许多重要功能,这些功能为使用容器提供了明显的优势。然而,根据 JetBrains 的一项调查,这个新版本的发布并没有得到广泛采用,超过 80% 的开发人员仍在使用 Java 8。
“这是否意味着人们并没有像我们所知的那样在容器中运行 Java?或者人们只是没有意识到在容器中使用 Java 11 的好处?”Evans 想知道。
尽管采用速度缓慢,但 Java 每六个月的发布节奏一直在加速发展 - Java 12 于 2019 年 3 月发布,Java 13 随后于 9 月发布。根据 Trisha Gee 的说法,它真的开始显示出它的价值:
每次发布都很小,但都是可以预见的。虽然它们并不都包含令人兴奋的新语言变化,但你可以看到语言正在稳步前进。
此外,它还支持预览功能的想法,我认为我们在 switch 表达式中确实做得很好——开发人员可以试用该功能并根据感觉提供真实的反馈,而不是抽象的概念反馈想法。在 Java 13 中,switch 表达式的语法略有变化,这是可能的,因为它是一个预览功能,而不是一成不变的。
2019 年又带来了一个惊喜,Oracle 将 Java SE 转移到了基于订阅的模式。但是,正如《Learning Java》的合著者 Marc Loy 指出的那样,“随着人们对 OpenJDK 的热情日益高涨,整个 Java 社区正面临着‘不幸’的变化。”
对于刚刚到来的2020年,埃文斯建议,2020年应该继续关注2019年的发展趋势:
我们如何才能接近 Valhalla 项目的正式发布?提供模式匹配和代数数据类型(Amber 项目)的增量策略是否可行?Quarkus 能否兑现其承诺并满足早期粉丝的期望?2020 年会是 Kotlin 在 Android 上实现重大飞跃的一年吗?
这是激动人心的时刻,我们正在向新的事物转变,并且发生了很多事情。
JavaScript
JS 的第一个时代(从 1997 年到 2007 年)并不顺利。每个人都知道 Brendan Eich 的故事,但很少有人知道 ES4 是如何在 Flash/Actionscript 等封闭生态系统的激烈竞争中摇摇欲坠的。Brendan Eich 和 Allen Wirfs-Brock 合著的《JavaScript:最初的 20 年》很好地讲述了 JS 的完整起源故事。
JS 的第二个时代(2009-2019)始于 2009 年这个奇迹之年,这一年诞生了 npm、Node.js 和 ES5。随着 Doug Crockford 向我们展示了其惊人的能力,用户构建了一整套 JS 构建工具和库,并将 JS 的使用扩展到桌面和新智能手机。到 2019 年,我们甚至在 Facebook 的 Hermes 手机等产品和编译器优先的前端框架(如 Svelte 3)中看到了 JS 特定的运行时。
这种语言将在10年后成为Web开发最常用的语言。
科特林
谷歌于 2019 年 5 月宣布 Kotlin 现已成为 Android 应用开发人员的首选语言,证明了该语言的广泛采用。
尽管许多 Android 开发者尚未完全迁移到 Kotlin,但已经迁移的开发者知道它带来的好处。《Head First Kotlin》的作者 Dawn 和 David Griffiths 分享了 Kotlin 崛起背后的一些原因:
对于由 IDE 公司创建的语言而言,Kotlin 拥有良好的工具支持水平并不令人意外。代码契约的实验性 DSL 使开发人员能够保证其代码的行为方式。您的函数是否有副作用?它是否保证返回非空值?代码契约允许您做出这些承诺,编译器可以使用它们来放宽编译时检查。
现在,不同 Kotlin 平台之间的障碍也正在被打破。“expect”/“actual”限定符使开发人员更容易编写跨 Java/Native/JS 环境兼容的代码。序列化支持意味着可以更轻松地将 JSON 数据转换为 Kotlin 对象,反之亦然。
我希望看到 Kotlin 继续保持惊人的增长势头——而且不仅限于 Android。JetBrains 开发者宣传团队负责人 Hadi Hariri 指出了 Kotlin/Everywhere 的成功,它让人们可以学习 Kotlin 在 Android、Google Cloud Platform 和多平台开发中的基础知识和最佳实践,并用数据来说明:
“从 5 月到 11 月,我们已成功覆盖 86 个国家的 30,000 人。2019 年,KotlinConf 连续第三年门票销售一空,参会人数超过 1,700 人。这表明,开发人员对该语言的兴趣和采用正在增长。”
去
当 Gophers 回顾 2019 年时,他们可能会记得试图获得提案的传奇故事。Go 开发人员兼作者 Jon Bodner 解释说:
关于 Go 最常见的抱怨之一是错误处理过于冗长。因此,6 月初,Go 核心开发人员提议添加一个名为 try 的新内置函数。GitHub 上现已开放一个问题来讨论这一新功能。在一个月内,已有近 800 条评论,其中大部分是负面的。反对这一新功能的人认为这一变化使代码过于“神奇”,并掩盖了逻辑流程。在审查了反馈后,Go 团队将该提案标记为已完成,并于 7 月 16 日关闭。
这个过程值得注意的不是功能的失败,而是 Bodner 所描述的“过程发生的方式:提出了一个功能,进行了尊重的讨论,但许多人认为这种改变与 Go 的风格不一致。最后,管理该语言的人决定尊重大多数人的意见。这就是开发人员谈论社区时的意思。”
2020 年应该会使 Go 的合约规范(即所谓的泛型提案)更加清晰。
Bodner 表示:“Go 似乎将使用一种与其他语言略有不同的泛型方法,但这种方法与 Go 的惯用语非常契合。”希望它能保留 Go 的惯用风格,同时添加开发人员在其他语言中发现有用的功能。
锈
我们与《Programming Rust》的合著者 Jim Blandy 进行了交谈,以了解他对 Rust 在 2019 年的进展变化的看法。
去年,他指出,“Rust 长期以来一直以某种形式支持异步编程,但异步函数为这种代码提供了一种语法,与 Rust 以前的产品相比,这是一个显着的改进。”
他对 Rust 语法改进的期望实现了吗?是的,最终实现了:Brandi 解释说,async/await 语法直到 2019 年 11 月 7 日发布的 1.39 版才变得稳定。
“最初,我们希望 async/await 语法能够成为 Rust 2018 版的一部分,但花了更长的时间才把事情做好。”尽管如此,他还是对该语法在 2020 年对 Rust 的意义寄予厚望:“将 async 集成到语言中可以让借用检查器知道你的操作,因此异步代码看起来就像惯用的 Rust。
Rust 社区也对 WebAssembly 感到兴奋,它今年作为 C/FFI 的理论替代品出现,适用于需要可移植、高性能模块的生态系统。正如 Rust 专家 Nathan Stocks 指出的那样,“您还可以使用轻量级沙盒!”最让 Stocks 印象深刻的是“该理论有多少部分已经成功原型化并得到验证。”
以前,我曾将 WebAssembly 纯粹视为在浏览器中运行非 JS 语言代码的编译目标。使用浏览器之外的任何语言使用 Web Assembly 的能力令人望而生畏。
迅速
去年有关 Swift 的最大新闻是 SwiftUI 的发布,这是 Apple 用于在所有 Apple 设备上设计用户界面的最新框架,以及 TensorFlow 的 Swift 版本。
正如 Timirah James 所解释的那样,SwiftUI 的声明性赢得了开发人员的广泛关注,并且它已经被视为 UIKit 的未来继任者。
至于 Swift for TensorFlow,Buttfield-Addison 称其为“Swift 的全新用途”。他解释说:“Swift 一直是一种出色的应用程序开发和系统编程语言,也是一种新兴的 Web 和后端开发语言,但现在,有了 Swift for TensorFlow,它也是一个强大的 ML 框架。”原因如下:
Swift for TensorFlow 由包括 Swift 的原创者 Chris Lattner 在内的团队开发,提供(或将在完成后提供)机器学习和数值计算所需的一切。最令人惊奇的是,Swift 的底层编译器框架和设计使对具有自动可微分性的可微分编程提供全面的一流支持成为可能。
完整的可区分编程语言将使以前不可能的事情成为可能:最好的例子是在构建神经网络和调试派生类时能够使用标准编程调试器逐步进行反向传播。
Swift for TensorFlow 还为 Swift 提供了完整的 Python 支持,让数据科学家能够使用清晰的 Swift 代码混合搭配他们所需的有用且熟悉的 Python 框架。
展望未来,James 和 Buttfield-Addison 都很高兴看到 Swift 的新方向,James 指出“Swift 在移动社区之外的不同社区和堆栈中得到了迅速采用,特别是在无服务器领域”,而 Buttfield-Addison 则呼吁“像 Kitura 这样的令人惊叹的 Web 开发框架,以及各种针对小众领域的令人惊叹的框架......例如 SwiftPlot,它是 Python 中无处不在的 Matplotlib 的 Swift 原生版本。”
未来会是什么样的?
变化是不可避免的,随着编程语言不断倾向于针对云、微服务、大数据跨平台和机器学习的新趋势进行优化,每种语言及其生态系统都将继续以自己独特的方式进行适应。
一些语言可能会在 2020 年发布重大版本,C++20 将于今年夏天发布,Scala 3.0 预计将于 2020 年末发布。但很明显,即使是最小的变化也会对程序员的日常生活产生巨大的影响。
长期以来,人们经常将 Java 与 Kotlin、Python 与 Go、Swift 与 OC、Rust 与 Php 进行比较。然而,Java、Python、C 和 JavaScript 仍然是编程语言领域的常青树。即使在过去 10 年里,情况也是如此。