在进入新的十年之际,我们请编程专家(包括我们自己的O'Reilly的几位作者和讲师)对他们对于某些老牌玩家和快速发展的语言所存储内容的想法进行了思考。
Python
今年Python的最大新闻是,创建者和“一生的仁慈独裁者” Guido van Rossum退休,将Python交给了Python指导委员会。到目前为止,这是权力的无痛转变,正如Python Crash Course的作者埃里克·马特斯(Eric Matthes)所认为的那样,这不足为奇,因为“圭多(Guido)长期以来保持着自己以及他在社区中的角色。” 2020年还将终止对Python 2.7的支持,这很可能导致其在坚持派中的头痛问题。同时,Python仍然是数据科学的首选语言。
对于Matthes而言,Python的一个令人激动的方面是“来自一个社区的各种有趣且关键的项目已经诞生了,长期以来,它们都是有意建立多样性的。” Python指导委员会成员和CPython的核心开发人员Carol Willing也庆祝了这些项目,例如Binder服务,该服务通过在Jupyter Notebook中创建可执行环境来促进可重复的研究,尤其是当它们超出其最初的目标时。她指出,“活页夹去年在许多Python会议上被广泛用于教学讲习班和教程。” Willing还向CircuitPython和Mu项目大声疾呼,问道:“谁不喜欢硬件,闪烁的LED,传感器,以及使用Mu的用户友好的编辑器,这对成年人和孩子来说都是很棒的选择?”
Java
在Java方面,这主要是个好消息。Java冠军本·埃文斯(Ben Evans)解释说:“再一次,关于Java消亡的谣言只不过是平台批评者的一厢情愿而已。” 但这并不是一帆风顺的。正如我们去年所指出的那样,Java 11的发布于2018年9月带来了许多新功能,其中包括许多使该发布在使用容器方面具有明显的明显优势的功能。但是,根据JetBrains的调查,此最新版本的广泛采用并没有随之而来,超过80%的开发人员仍在使用Java 8。。Evans想知道:“这是否意味着人们没有像我们所知道的那样在容器中运行Java?还是人们只是不知道容器中11的好处?”
尽管采用速度缓慢,但Java的六个月发布节奏一直在不断发展-Java 12于2019年3月下降,Java 13于9月问世。根据Java冠军Trisha Gee的说法,它确实开始显示其价值:
每个版本很小,但是可以预见。尽管它们并不都具有令人兴奋的新语言更改,但是您可以看到该语言正在稳步发展。此外,它还启用了预览功能的想法,我认为我们认为切换表达式的工作效果非常好-开发人员必须尝试使用该功能,并根据使用感觉来提供真实的反馈,而不是抽象的,概念性的反馈想法。作为响应,在Java 13中,开关表达式的语法发生了很小的变化,这是有可能的,因为它是预览功能,而不是一成不变的。现在,计划将这种更新的语法作为生产的JDK 14的一部分就绪功能。
当Oracle将Java SE迁移到基于订阅的模型时,2019年带来了另一个惊喜。但是,正如Learning Java(第五版,现在已经发布)的合著者Marc Loy 指出的那样,“随着OpenJDK的热情增加,整个Java社区已经接近了这种不幸的变化。”
至于来年,埃文斯(Evans)建议2020年将关注2019年趋势的发展:
我们将如何接近Valhalla项目的生产版本?提供模式匹配和代数数据类型(Project Amber)的增量策略是否会奏效?Quarkus会履行其承诺和早期粉丝的信念吗?2020年将成为Kotlin超越Android的重要一步吗?这是激动人心的时刻,我们正在过渡到新的事物,并且正在发生很多事情。
Kotlin
谷歌于2019年5月宣布Kotlin现在是Android应用程序开发人员的首选语言,这促进了该语言的强大应用。尽管许多Android开发人员仍在迁移到Kotlin,但已经过渡的人都知道它提供的好处。Head First Kotlin的作者Dawn和David Griffiths 分享了Kotlin崛起背后的一些原因:
对于由IDE公司创建的语言,Kotlin拥有良好的工具支持水平也就不足为奇了。用于代码合同的实验性DSL使开发人员能够提供有关代码行为方式的保证。您的功能有副作用吗?是否可以保证返回非空值?代码合同允许您做出这些承诺,并且编译器可以使用它们来放松编译时检查。
现在,不同的Kotlin平台之间的障碍也正在被打破。“期望” /“实际”限定符使开发人员可以更轻松地编写跨Java / Native / JS环境兼容的代码。现在,序列化支持意味着将JSON数据转换为Kotlin对象更加容易,反之亦然。
希望看到Kotlin继续保持惊人的增长-而不仅仅是在Android中。JetBrains开发人员宣传团队负责人Hadi Hariri指出Kotlin / Everywhere的成功-一系列社区主导的活动,您可以在Android,Google Cloud Platform和多平台开发中学习Kotlin的基本知识和最佳实践,作为证明:“从5月到11月,我们已经成功地覆盖了86个国家/地区的30,000人。KotlinConf在2019年连续三年销售一空,有1,700多名与会者。这尤其表明,对该语言的兴趣和采用正在增长。”
Go
当Gophers回顾2019年时,他们可能会记得尝试提案的传奇故事。Go开发人员兼作家Jon Bodner解释说:
关于Go的最常见的抱怨之一是错误处理太冗长。因此,在6月初,Go核心开发人员建议添加一个名为try的新内置函数。GitHub问题已打开,以讨论此新功能。一个月之内,有将近800条评论,其中大多数是负面的。反对这项新功能的人们感到,这种改变使代码过于“不可思议”,并掩盖了逻辑流程。审查反馈后,Go小组将提案标记为已完成,并于7月16日被拒绝。
这个过程值得注意的不是功能的失败,而是,正如Bodner所描述的那样,“过程发生的方式:提出了一个功能,讨论受到尊重,但是许多人认为更改与Go的风格不一致。最后,管理语言的人决定尊重多数意见。这就是开发人员谈论社区时的意思。”
2020年应该使Go的Contracts规范更加清晰,这就是众所周知的Generics提案。根据Bodner的说法,“ Go似乎将使用一种与其他语言略有不同的方法来实现泛型,但它很适合Go的习惯用法。” 希望它将使Go保持其惯用的风格,同时添加开发人员发现在其他语言中有用的功能。
Rust
我们与Programming Rust的合著者Jim Blandy进行了签到,以了解他对Rust在2019年的进步的看法是如何变化的。去年,他指出,“ Rust长期以来一直以一种或另一种形式支持异步编程,但是异步函数为这种代码提供了语法与Rust以前的产品相比,这是一个重大改进。” 他对Rust语法进行改进的希望是否实现了?是的,最终:Blandy解释说,异步/等待语法直到2019年11月7日发布的1.39版才变得稳定。花了更长的时间才把事情做好。” 不过,他对2020年Rust对Rust的意义寄予了很高的期望:“将异步集成到语言中可以使借阅检查器了解您的操作,因此异步代码看起来像惯用的Rust。
Rust社区也对WebAssembly感到兴奋,今年WebAssembly成为了C / FFI的理论替代品,用于需要便携式,高性能模块的生态系统。正如Rust专家Nathan Stocks指出的那样:“您也可以使用轻型沙箱!” 令Stocks印象最深的是“有多少理论已经成功原型化并得到了证明。”
以前,我曾把WebAssembly纯粹视为一个编译目标,以便在浏览器中运行非JS语言的代码。能够从浏览器之外的任何语言使用Web程序集的功能令人不寒而栗。
Swift
去年Swift中最大的故事是苹果公司用于在所有苹果设备上设计用户界面的最新框架SwiftUI的发布,以及TensorFlow的Swift版本,TensorFlow是将Google的TensorFlow框架与Swift集成在一起的深度学习和差异化编程平台。正如Timirah James解释的那样,SwiftUI的声明性已经在开发人员中引起了广泛的关注(理所当然的),并且已经被视为UIKit的未来继任者。” 至于TensorFlow的Swift,巴黎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)以及各种针对特殊领域的令人惊叹的框架……例如SwiftPlot,它是Python中无处不在的Matplotlib的Swift本机版本。”
什么样的未来?
变化是不可避免的,并且随着编程语言继续倾向于优化云,微服务,大数据和机器学习中的新趋势,每种语言及其生态系统将继续以自己独特的方式进行适应。某些语言可能会在2020年发布大版本-C ++ 20将于今年夏天发布,Scala 3.0有望在2020年末发布-但显而易见的是,即使最小的更改也可能在程序员的日常生活中引起巨大波澜。