作者丨InfoQ英文站
譯者丨王強
關於程式語言的討論從來沒有停止,儘管如此,每一場討論依舊會引起開發者的廣泛關注。從 PC 時代,到移動網際網路時代,再發展到雲計算時代,技術趨勢的改變讓程式語言不斷調整著自己的定位。InfoQ 英文站的編輯們按照技術採用生命周期的理論對各大程式語言在現階段的發展趨勢進行了分析,Rust 興起,Python 興趣正濃。
1
本文要點
趨勢報告中出現了 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 等)的趨勢跟蹤;之前雖然這些語言很受歡迎,但我們並未公開跟蹤它們的應用曲線。以前我們是在內部討論與這些語言相關的技術和要素,而現在我們的趨勢圖上也有了它們的位置。
2
發展中的程式語言:Elixir、Rust 和 Swift
Elixir 是一種函數式並發通用程式語言,是趨勢報告上的新面孔,目前處於創新者試用階段。Elixir 構建在 Erlang(我們將其納入創新者試用類別)之上,並在 Erlang 虛擬機中運行。Elixir 和 Erlang 共享相同的抽象,這些抽象用於構建分布式容錯應用程式。
我們認為,Rust 已從創新者邁入了早期使用者階段,很大程度上是受其在基礎設施和網絡數據平臺(例如 Habitat 和 Linkerd 2.0)中應用的推動。該語言也正逐漸成為 WebAssembly 的公認搭配選擇,這也提高了它的知名度。此外,我們注意到 Facebook 選擇使用 Rust 來實現其 Libra 加密貨幣。
用於 iOS 開發的 Swift 已進入早期流行階段,主要是因為作為行動應用程式運行時的 iOS 的普及。儘管我們沒有在這份趨勢報告中跟蹤 Kotlin,但是 InfoQ Java 和 JVM 趨勢報告發現 Kotlin 的受歡迎程度有所提高,因為 Kotlin 現在已成為開發 Android 應用程式的默認語言。
3
基礎設施語言:Ballerina、Pulumi 和 Dark
我們發現業界對與基礎設施 / 以云為目標的語言、DSL 和 Ballerina 和 Pulumi 等 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 年頂級程式語言」。
https://www.infoq.com/articles/programming-language-trends-2019/
4
大會推薦
【推薦一場 2019 年末不可錯過的 AI 技術大會】機器學習、NLP、知識圖譜等技術有哪些最新落地案例?我們邀請到了來自 AWS、微軟、BAT、華為等 50+國內外一線 AI 技術專家,帶來智能金融、電商、物流、AI 晶片等領域的乾貨分享,更有賈揚清、李沐、顏水成等大牛現場助陣,部分精彩議題搶先看:
【菜鳥網絡】 人工智慧在智慧交通物流的技術演進之路
【阿里媽媽】工業級深度學習在阿里廣告的實踐、創新與最新進展
【微軟小冰】人格化對話機器人的構建及在語音場景當中的實踐
【百度】AI 大生產時代下的 NLP 技術創新與應用實踐
【螞蟻金服】金融知識圖譜在螞蟻的業務探索與平臺實踐
今日薦文
邊緣計算的新聞關注度從 2017 年開始變得越來越高。邊緣計算的幾個重要玩家,也是公有雲的巨頭:亞馬遜、微軟、Google 先後有自己的布局。邊緣計算可以替代雲計算嗎?
邊緣計算技術發展現狀與對策
點個在看少個 bug