时间转到2020年,很多人对编程语言的未来发展有了更多的期待。因此,我们询问了几位编程专家对流行编程语言的看法。Python今年Python最大的新闻是它的创造者和“终身仁慈的独裁者(BDFL)”GuidovanRossum退休,将Python移交给Python指导委员会。到目前为止,权力交接一直很顺利,这并不奇怪,正如《Python 编程从入门到实践》(Python速成课程)的作者EricMatthes所言,因为“Guido早就能够到2020年也将结束对Python2.7的支持,这是可能会让反对者头疼。与此同时,Python仍然是数据科学的首选语言。对于Matthews来说,Python令人兴奋的方面之一是“在一个社区中出现了各种有趣和关键的项目,这些项目有意构建了它的Carol是Python指导委员会的成员,也是CPythonWilling的核心开发人员,他也赞扬Binder服务等项目,该服务通过我们的JupyterNotebooks创建可执行环境来促进可重复研究,尤其是当他们去超出了他们最初的目标。注意到Binder“在去年的许多Python会议上被广泛用于教学研讨会和教程中,”Willing还对Circu大喊大叫itPython和Mu项目,询问,“谁不喜欢硬件、闪烁的LED、传感器,使用Mu,一个很好的、用户友好的编辑器?”Java这对Java来说主要是个好消息。正如JavaChampionBenEvans解释的那样,“关于Java消亡的谣言再次被证明不过是平台批评家的一厢情愿。”但这也并非一帆风顺。正如我们去年指出的那样,2018年9月发布的Java11带来了大量新功能,其中许多功能为使用容器提供了显着且明显的优势。然而,根据JetBrains的一项调查,这个最新版本并未得到广泛采用,超过80%的开发人员仍在使用Java8。Evans想知道,“这是否意味着人们不像我们所说的那样在容器中运行Java?或者人们只是没有意识到Java11在容器中的好处?”尽管采用缓慢,但Java的月度发布节奏仍在继续:Java12于2019年3月发布,Java13于9月发布。根据JavaChampionTrishaGee的说法,它已经开始显示其价值:每个版本都很小,但可以预测。虽然他们没有令人兴奋的新语言变化,但我们可以看到该语言正在稳步向前发展。此外,它支持预览功能的想法,我认为正如我们已经看到的那样,它与switch表达式一起工作得非常好,开发人员应该尝试该功能并根据使用情况提供真实的反馈,而不是抽象的反馈概念。作为回应,对switch表达式的语法做了一个小改动,这是可能的,因为它是Java13中的预览功能,而不是一成不变的。现在,计划将此更新后的语法作为JDK14中的生产就绪功能发布。2019年甲骨文将JavaSE移至基于订阅的模型时带来了另一个惊喜。但是,正如《Learning Java,第五版》(现已发布的早期版本)的合著者MarcLoy指出的那样,“整个Java社区对OpenJDK的热情越来越高,OpenJDK已经开始解决这一不幸的变化。”至于来年,Evans建议2020年应该关注2019年的趋势:距离ProjectValhalla的生产版本发布还有多长时间?提供模式匹配和代数数据类型(ProjectAmber)的增量策略是否有效?Quarkus能否兑现其承诺并维持早期粉丝的信念?2020年会是Kotlin超越Android成为重要先锋的一年吗?这是一个激动人心的时刻,我们正处于向新事物过渡的过程中,我们可以做的还有很多。Kotlin谷歌在2019年5月宣布,Kotlin现在是Android应用程序开发人员的首选语言,这为该语言的广泛采用做出了贡献。虽然许多Android开发人员仍在迁移到Kotlin的过程中,但已经完成迁移的开发人员知道它可以提供的好处。《Head First Kotlin》作者Dawn和DavidGriffiths分享了Kotlin崛起背后的几个原因:对于IDE公司创建的语言,Kotlin拥有良好的工具支持并不奇怪。一种用于代码契约的实验性DSL,使开发人员能够提供有关代码行为方式的保证。你的函数有副作用吗?是否保证返回非空值?代码契约允许我们做出这些承诺,编译器可以使用它们来放宽编译时检查。现在,不同Kotlin平台之间的壁垒也正在被打破。“expect”/“actual”限定符使开发人员更容易编写跨Java/Native/JS环境的兼容代码。现在支持序列化意味着可以更轻松地将JSON数据转换为Kotlin对象,反之亦然。让我们希望Kotlin继续以令人难以置信的速度增长,而不仅仅是在Android上。JetBrainsDeveloperEquityTeamLeadHadiHariri指出Kotlin/Everywhere(一系列社区主导的活动,我们可以在其中学习Kotlin基础知识和Android、谷歌云平台和多平台开发的最佳实践)KotlinConf的成功是最好的证明:“从5月到11月,我们已经成功接触了86个国家的近30,000人。2019年,KotlinConf连续第三年售罄,吸引了超过1,700名与会者。这尤其表明了人们的兴趣和接受度语言的数量正在增长。”Go当Go程序员(Gophers)回顾2019年时,他们很可能会想起“try”提案的传奇故事。关于Go最常见的抱怨之一是错误处理过于冗长,Go开发人员兼作者JonBodner解释道。于是在6月初,Go的核心开发者提出添加一个新的内置函数try。并发布了一个GitHubissue来讨论这个新特性。不到一个月的时间,就有近800条评论,大部分都是负面的。这项新功能的反对者认为,这种变化使代码过于“神奇”,并且模糊了逻辑流程。在审查了反馈后,Go团队将提案标记为关闭并于7月16日拒绝了它。在这个过程中值得注意的不是功能的失败,而是正如博德纳所描述的那样,“过程发生的方式:a特性被提出,讨论被尊重,但很多人认为这个变化不符合Go的风格。最终,负责语言的人决定尊重大多数人的意见。这就是开发人员所说的社区。到2020年,Go的契约规范(也称为泛型提案)应该会更加清晰。Bodner说,“看起来Go将采用与其他语言略有不同的泛型方法,但它非常适合Go的习惯用法。”泛型是发现在其他语言中非常有用),同时仍然保持其惯用风格。Rust我们采访了《Programming Rust》的合著者JimBlandy,以了解他对Rust开发的看法在2019年发生了怎样的变化。去年,他指出“Rust已经长期支持一种或另一种形式的异步编程,但是异步函数为这种代码提供了一种语法,它是对Rust以前语法的重大改进。”你的愿望实现了吗?是的,最终:Blandy解释说async/await语法直到2019年11月7日发布的1.39版本才稳定下来。“最初,我们希望async/await语法成为Rust2018版本的一部分,但要花更长的时间才能把事情做好。”尽管如此,他还是寄予厚望F或者async在2020年对Rust意味着什么:“将async集成到语言中可以让借用检查器了解我们在做什么,因此异步代码看起来像惯用的Rust。”正如Blandy指出的那样,Rust生态系统正在快速发展,采取利用语言的新表达能力。Rust社区也对WebAssembly感兴趣,它在今年作为C/FFI的理论替代品出现,用于需要可移植、高性能模块的生态系统。正如Rust专家NathanStocks所说:“我们也可以使用轻量级沙箱!”最让斯托克斯印象深刻的是“理论已经成型并成功证明”。之前,我纯粹将WebAssembly作为一个编译目标,在浏览器中运行非JS语言的代码。添加从浏览器以外的任何语言使用Web程序集的能力令人不寒而栗。SwiftSwift去年最大的事件是SwiftUI和SwiftforTensorFlow的发布。SwiftUI是Apple最新的框架,用于在所有Apple设备上设计用户界面,而SwiftforTensorFlow是一个集成了Google的TensorFlow框架和Swift的深度学习和可微分编程平台。正如TimirahJames所解释的那样,SwiftUI“由于其声明性(而且理应如此)而在开发人员中获得了很大的吸引力,并且被视为未来UIKit的潜在继任者。”至于TensorFlow的Swift,ParisButtfield-Addison称之为“Swift的全新用途”。他解释说,“Swift一直是应用程序开发和系统编程的优秀语言,也是一种很有前途的网络和后端开发语言,但现在,SwiftforTensorFlow已经可用,它是一个强大的ML框架。”原因如下:SwiftforTensorFlow有一个开发团队,其中包括Swift的创建者ChrisLattner,它可以为我们提供(或将在完成后提供)机器学习和数值计算所需的一切。最令人惊讶的是,它对具有自动微分功能的可微分编程提供了一流的支持,这是由Swift的底层编译器框架和设计实现的。语言范围的可微分编程将使以前不可能的事情成为可能:一个很好的例子是当我们构建神经网络时,我们可以使用标准编程调试器逐步完成反向传播和调试导数。SwiftforTensorFlow还为Swift提供了完整的Python支持,使数据科学家能够将他们需要的有用且熟悉的Python框架与简洁而富有表现力的Swift代码混合搭配。展望未来,James和ButtfieldAddison都很高兴看到Swift的新方向,James指出“Swift在不同社区和移动以外的其他技术堆栈中的采用,特别是在无服务器中非常快,”ButtfieldAddison称“令人惊叹的Web开发框架,如Kitura,以及各种令人惊叹的特定于利基市场的框架,如SwiftPlot,这是Python中无处不在的Matplotlib的Swift原生版本。“未来是什么?变化是不可避免的,随着编程语言不断针对云、微服务、大数据和机器学习的新趋势进行优化,每种语言及其生态系统将继续以自己独特的方式进行调整。一些语言可能会在2020年有重大发布(C++20将在今年夏天发布,Scala3预计在2020年底发布)。但有一点很清楚,即使是最小的变化也会在程序员的日常生活中引起骚动。
