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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章