首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rust兴起,Python兴趣正浓丨InfoQ编程语言趋势报告

关于编程语言的讨论从来没有停止,尽管如此,每一场讨论依旧会引起开发者的广泛关注。从PC时代,到移动互联网时代,再发展到云计算时代,技术趋势的改变让编程语言不断调整着自己的定位。InfoQ 英文站的编辑们按照技术采用生命周期的理论对各大编程语言在现阶段的发展趋势进行了分析,Rust兴起,Python兴趣正浓。

本文要点

  • 趋势报告中出现了Elixir的身影,它现在处于创新者试用阶段,这是在Erlang虚拟机上运行的函数式并发型通用编程语言。
  • 业界的兴趣与创新正在越来越多地投向基础设施感知或云特定的语言、DSL和Ballerina与Pulumi之类的SDK。
  • 我们认为,Rust已从创新者过渡到了早期使用者阶段,这很大程度上源自它在基础设施和网络数据平台(如Habitat和Linkerd 2.0)中取得的应用进展。
  • Python的受欢迎程度仍在增长,主要归功于它在数据科学和教学中的应用。
  • 用于iOS开发的Swift已进入早期流行阶段,主要是因为作为移动应用程序运行时的iOS广泛流行。尽管Kotlin是列在JVM趋势报告中的,但它在Android应用程序开发领域也进入了类似的早期流行阶段。
  • 至于 .NET,我们看到了业界对 .NET Core的浓厚兴趣,并且随着 .NET Core 3的到来,我们预期这种情况会继续下去。

2019年及以后的编程语言趋势是怎样的?这份报告旨在帮助技术领导者制定中长期技术投资决策,并帮助个人开发者找出哪些编程语言正在流行,选择在哪里投资他们宝贵的时间和资源、学习哪些新的编程语言和开发哪些技能。

这份报告总结了InfoQ编辑团队目前对编程语言领域中技术的流行程度和新兴趋势的看法,但不包括Java/JVM和JavaScript/Web开发领域,这两者有独立的报告。本报告也是一份意见汇总,是由我们的编辑(他们是活跃的软件工程师)进行的广泛内部讨论、对外部公开调查结果的评论以及对内部或私人的调查和分析结果的评论汇集而成的。下文列出了多位编辑对话的摘录。

我们认为,InfoQ和QCon所关注的主题都可以归结为创新者、早期使用者和早期流行三大阶段。我们要做的是找出与Geoffrey Moore所说的早期市场相匹配的理念,在这种市场中“客户群由希望发掘机遇或解决眼前问题的技术爱好者和有远见的人们组成。”我们也在寻找有能力“跨越鸿沟”而进入广泛应用阶段的理念。值得一提的是,在这种情况下,技术在应用曲线上的确切位置可能会有所不同。例如,Rust可能在旧金山湾区的企业中已经广泛应用,但在其他地方可能就没那么流行了。

自从我们发布2018年内部编程趋势报告以来,我们的报告也有了一些明显的变化,其中包括加入了几种语言(如Python、Ruby和PHP等)的趋势跟踪;之前虽然这些语言很受欢迎,但我们并未公开跟踪它们的应用曲线。以前我们是在内部讨论与这些语言相关的技术和要素,而现在我们的趋势图上也有了它们的位置。

发展中的编程语言:Elixir、Rust和Swift

Elixir是一种函数式并发通用编程语言,是趋势报告上的新面孔,目前处于创新者试用阶段。Elixir构建在Erlang(我们将其纳入创新者试用类别)之上,并在Erlang虚拟机中运行。Elixir和Erlang共享相同的抽象,这些抽象用于构建分布式容错应用程序。

我们认为,Rust已从创新者迈入了早期使用者阶段,很大程度上是受其在基础设施和网络数据平台(例如HabitatLinkerd 2.0)中应用的推动。该语言也正逐渐成为WebAssembly的公认搭配选择,这也提高了它的知名度。此外,我们注意到Facebook选择使用Rust来实现其Libra加密货币。

用于iOS开发的Swift已进入早期流行阶段,主要是因为作为移动应用程序运行时的iOS的普及。尽管我们没有在这份趋势报告中跟踪Kotlin,但是InfoQ Java和JVM趋势报告发现Kotlin的受欢迎程度有所提高,因为Kotlin现在已成为开发Android应用程序的默认语言。

基础设施语言:Ballerina、Pulumi和Dark

我们发现业界对与基础设施/以云为目标的语言、DSL和BallerinaPulumi等SDK的兴趣正在日益增加。我们也在跟踪Dark,它目前处于内部测试阶段,因此尚不够资格进入趋势图。此类技术目前稳稳地处在创新者试用阶段,但我们还在密切关注它们,并将于11月在旧金山QCon上专门讨论“基础设施语言”。

作为参考,下面是我们2018年下半年的内部趋势图。2019年的版本在本文开头。

编程语言趋势2018

.NET 2019第三季度

至于说到 .NET,我们注意到业界对 .NET Core产生了浓厚兴趣;随着 .NET Core 3的到来,我们预计这种情况会继续下去。我们在图表中将 .NET Core分为2.x分支和3.x分支,因为它们在应用方面位于不同的位置。谈到.NET语言,我们预期C#8将迅速普及。我们对F#还是很感感兴趣,也在追踪它,但我们认为它的复杂性和缺乏来自微软的大力支持,意味着它不太可能获得更广泛的应用。

我们将ASP .NET Core放在早期流行阶段。如今我们认为大多数新的Web工作都是在ASP.NET Core上完成的,但不一定是 .NET Core。现有的一部分应用程序正在移植,但大多数应用是不会移植过去的。WCF在企业中仍然非常重要,但微软并没有在 .NET Core中很好地支持它。我们已经将Visual Basic移到了过时阶段,实际上我们现在将它视为爱好者才会考虑的语言。

以下是一些InfoQ编辑团队的内部对话的摘录,做了简短编辑和汇总,这些摘录也为趋势图上的定位工作提供了更多参考。

蒂米什瓦拉技术大学计算机与自动化学院的助理教授,InfoQ编辑Abel Avram

JetBrains发布了他们的《2019年开发人员生态系统现状》,调查了7,000名开发人员并得出以下结论: Java——最受欢迎的主要编程语言 JavaScript——最常用的整体编程语言 Go——最有前途的编程语言 Python——被研究最多的语言 Go最初在2017年占有8%的份额,现在已经达到了18%。此外,开发人员选择他们想要使用或迁移到的语言时,Go的占比最大(13%)。 StackOverflow在今年对Python发表了这样的评论:“Python是增长最快的主要编程语言,在我们的编程语言调查中排名再次上升,今年超越了Java成为第二受欢迎的语言(仅次于Rust)。”

Arthur Casals,研究人工智能/多智能体系统领域的计算机科学研究员:

从我最近所见/所读的内容来看,Rust的普及步伐似乎正在加快。不过,它仍然(某种程度上)处于边缘地带,并被视为“C++的替代品”。但是,随着它的可用库数量的增加,且更多有影响力的用户也开始使用Rust,我认为把它放在"早期使用者"阶段是很合适的。

Elixir似乎正在蓬勃发展,尤其是在巴西——其实这种语言的创造者是巴西人,并且那里至少有一家新的独角兽企业(Movile)正在公开使用它(此外教育领域的Quero等其他新兴公司也是它的用户) 。

我最近看到了一些有关Elixir的讨论,尤其是他们找到了Quero的人担任小组成员,讲述他们如何从头开始应用Elixir的故事之类,之后这种讨论就越来越多了。还有一个很好的案例来自Discord的工程师们,他们最近写了一篇结合Rust和Elixir为1100万并发用户提供后端支持的文章。这是一个很棒的现实场景,既涉及语言也涉及一款非常流行的应用程序,这无疑壮大了它们的声势。

SitePen首席执行官和Dojo联合创始人Dylan Schiemann

Rust正处于早期使用者阶段,在我看来它的逐渐流行很大程度上是因为WebAssembly甚至是Servo

尽管Go受关注有一段时间了,但我仍将它归在早期使用者阶段。语言的生命周期比框架之类长很多,我确实不认为Go已经达到了主流应用阶段。同样,Elixir和Elm也会被定为早期使用者阶段。

我很少听人提起Pony这门语言,在我看来现在它还处于创新者阶段。

Swift是iOS应用程序的默认入口点,因此可能已经进入早期流行阶段。

至于说基于云的IDE,CodeSandbox和StackBlitz在过去的一年中,因其基于浏览器编辑的出色功能集合以及与本地开发工具的集成而取得了显著的使用率增长。

在停滞了几年之后Dart似乎开始复苏,主要归功于Flutter。

InfoQ总编辑Charles Humble

我把Swift提升到了早期流行阶段——我认为这种趋势正在加速,而且考虑到WWDC的一些新发布内容——尤其是Swift UIKit——我们正在进入苹果平台的“Swift时代”。

我觉得我们也可以将服务端Swift移至早期使用者阶段。管中窥豹,我和一些了解它的人们交流时,他们告诉我它正在稳定增长,并且有很多好东西是由开源的swift-nio驱动的;这反过来又提升了已经迁移到它上的几个服务端框架的性能。

Rust在过去一年中的增长是无可置疑的,我把它从创新者提升到了早期使用者阶段。他们一直很好地将其定位为Wasm的合作伙伴,我认为这很有用。

我不好说Go是什么情况。它仍在增长,但我感觉它还没有达到早期流行阶段的程度;虽说可能会引起争议,但我会把它留在早期使用者中。

我听到了更多人在讨论Elixir,但我认为它仍然是创新者阶段。它仍然处于边缘市场。

我们还应该加上Python,并且应该放在早期流行阶段里。它的受欢迎程度一直在持续增长,这主要是受它在数据科学家中广泛流行的推动,而且我认为我们对这门语言的讨论还不够多。

我认为Pony无法走出创新者阶段;这很遗憾。我喜欢这门语言,虽然我发现它的类型系统相当复杂,也确实认为这是一项令人印象深刻的工作,但是它的社区仍然很小。现在我会把它从跟踪列表中删掉。

我终于听到了更多有关Dark的信息,尽管它是处于内测阶段。这在基础架构语言应用更加广泛的环境中是很有趣的事情。

Wolfram的软件管道工Werner Schuster

关于Swift:确实还处于发展初期,但是Swift for TensorFlow(S4TF)可能成为Swift的一大卖点,并且可能是Python的潜在竞争对手(至少在这个领域)。

这里有一篇非常详尽而有趣的文档,说明了为什么要使用Swift而不是其他语言。背后的作者是Chris Lattner,他现在在TensorFlow进行这方面的研究;Chris还尽力而为,在为所有场景创建IR(MLIR)

S4TF这个名字有点无趣,而且没法看出来所有的有趣内容(AD等)。

关于Python:我对Python的发展很感兴趣;显然,它已成为许多数据科学/ML原生库的首选粘合语言,从中受益匪浅——这是十年前的Ruby直到开始没落都没能搞明白的事情。

另一方面,Python一直在抵制其运行时的任何形式的现代化(有人记得Unladen Swallow吗?),更不用说关于解释器的一堆历史超过十年的项目了(没有一个搞出了名堂)。

我认为Jython也死了。上次我检查它的网站时它已经多年没有更新了,离Python 3.x差得远。

基础架构语言:似乎有一种新趋势是将一些语言(其中一些新面孔)耦合在一起部署。

Pulumi&co——TypeScript

Ballerina

Unison语言——由前Scala/Haskell员工开发的一种新的函数式语言,但是完全没有Monad;现在它还非常年轻

Dark语言——尚未公开发布

我很好奇所有这些语言的前景会是什么样的;可能有的只是昙花一现,也有可能成为未来15年中一些必不可少的语言特性迈出的第一步(就像子程序成为语言特性的历史)。

我们可能正在见证一个全新的,不可逆转的由Wasm统治的未来(浏览器和服务端的WASI等),以及原生(VM、容器和无服务器)层面的新浪潮,这将降低JVM/字节码的吸引力,并让所有人只需使用语言的原生版本(已经开发了数十年的规范版本)。需要明确的是,我上面所说的并没有真正涉及JVM原生语言,例如Clojure、Scala或Kotlin等。

New Relic的首席工程师兼JVM技术架构师Ben Evans

Elixir中有点东西。我并不是特别喜欢它——虽然它足够好用,但是除非你需要BEAM VM的实际优势(容错性和大量分布的简单事物),否则它似乎并没有很大的好处。

该语言的大多数爱好者之所以喜欢它,似乎是因为它是“新亮点”,和/或他们有Java过敏症(通常基于一些对这个平台过时十年以上的老观念),但是……我还没有看到任何令人信服的证据,证明有什么事情是JVM技术无法轻易完成的(尽管可能会需要更多步骤)——而且JVM与库的集成度更高,范围更广。

Dustin Schultz,首席软件工程师,Pluralsight的作者和技术推广者:

在过去的几年中,我发现Python有了长足发展。正如其他人所说,我认为这在很大程度上归功于数据科学、学校/大学的教学以及诸如Flask(与Django)之类的更轻便的框架。

我没有关于Python的任何负面看法(实际上我很喜欢编写它),但是我认为它的受欢迎程度并不代表企业场景中的流行。我很少看到用Python编写的大型分布式企业应用程序仍然在使用Python。它们可能始于Python,但由于性能原因最终会切换到其他语言上。

Charles Humble:就核心框架而言,自2012年以来它似乎有所改进——我认为很多工作都集中在.NET Core上。我的感觉是.NET Core已从创新者转变为早期使用者阶段。我想知道我们是否应该在.NET Core 3登陆时拆分它,将.NET Core 3重新引入创新者阶段,并将.NET Core 2引入早期使用者状态。

同样,我认为C#应该会进入早期流行时期——其实我觉得这没什么争议可言。

我认为F#与JVM上Clojure的发展轨迹类似——在我看来这是一门可爱的语言,但是我看不出它有什么迹象继续扩张下去。同样,我也看不到使用率下降的多少可能性。

毕马威(KPMG)的软件架构师和InfoQ的 .NET首席编辑Jonathan Allen:

谈到社区,F#有两个问题:

它没有来自微软的强大支持

领导层致力于以易用性为代价追求C#兼容性

它正在变得越来越复杂,这是计算机科学家喜欢的。但是,真正教学F#的培训人员主要面对非程序员,他们需要的是一门脚本语言。因此额外的复杂性使他们的工作更加困难。

我也认为C#8将很快到达早期使用者阶段。人们一直在要求可空的引用类型……起码从 .NET 1就开始呼吁了。

讨论中涉及的其他公开可用的研究和调查包括:“RedMonk编程语言排名:2019年6月”和IEEE Spectrum的“2019年顶级编程语言

原文链接Programming Languages InfoQ Trends Report - October 2019

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/DX6XDObLWSV1NrOwyYta
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券