程式語言迎來「取代潮」,Python、Java、C/C++ 誰最危險?

【CSDN 編者按】數百種程式語言層出不窮,關於誰優誰劣的爭議也未曾斷過,但為何總有這種爭論的出現,本文作者直擊要害地解析道:「答案很簡單,因為我們懶。當大家學習了一種程式語言或技術之後,就希望圍繞這種程式語言或技術建立一個舒適區,然後待在舒適區內固步自封」。

不過,在競爭日趨激烈的環境下,這樣的做法顯然不可取,那麼,未來極具潛力的程式語言到底有哪些呢?不妨通過本文的資料對比一探究竟。

原文連結:https://medium.com/codex/the-programming-language-s-of-the-future-24af5cfa8479

聲明:本文為 CSDN 翻譯,未經允許,禁止轉載。

作者 | Ugur Yagmur

譯者 | 彎月 責編 | 屠敏

我喜歡閱讀有關程式設計的提問和解答。最近,我經常看到以下這類問題:

  • 哪種技術會取代 JavaScript?

  • Kotlin 有機會取代 Java 嗎?

  • Rust 會取代 C++ 嗎?

  • 哪種語言最有希望取代 C?是 D、Go 還是 Rust?

我特別喜歡最後一個提問,因為提問題的人非常確信 C 語言會被取代,還給出了備選答案。我認為,自從學術論文《Energy Efficiency across Programming Languages》(《程式語言的能耗》:https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf)發表以來,這類問題的討論越來越頻繁。我認為,所有這些問題最終都可以歸結為一個常見的問題:將來我們會使用哪些程式語言?

在本文中,我將引用上述論文的一些結果,並分析一些其他的統計資訊,看看能不能找到這個問題的答案。首先申明,我會盡可能拋開個人偏見,保持客觀。下面,我們首先來看一看這篇論文。

程式語言的能耗論文

《程式語言的能耗》論文

如果看過上述論文,你可能對下面這張表格不陌生:

程式語言的比較,來源《程式語言的能耗》論文

我見過很多次,各大社交媒體平臺上都有人分享這張表格,相信幾乎無人不知。但是,在深入研究結果之前,我想先分享一些背景資訊。

關於論文得出的這些結果,首要問題是這些結果是如何測量的。普遍接受的測量 CPU 性能的方法是基準測試。論文的作者也針對多種程式語言實施了基準測試,他們採用了 10 個不同的程式設計問題,然後通過這些語言解決這些問題,統一採用了「計算機語言基準測試遊戲」中定義的演算法。下表給出了這些演算法及其資料大小:

CLBG 的程序庫

CLBG 的程序庫

此外,他們還根據下表中給出的範例對程式語言進行了分類:

然而,性能測試並沒有考慮到程式設計正規化,重要的是程式語言的類型:編譯型、解釋型,還是使用了虛擬機器?編譯語言、虛擬機器語言和解釋語言之間存在明顯的性能以及能耗差異。因此,他們針對各個類別,採用這些演算法進行測試,這種做法是正確的。

下一步是執行計算機語言基準測試。他們分享了幾個問題的結果,我們來看一看。

兩個 CLBG 的結果

兩個 CLBG 的結果

能耗的測量以焦耳為單位,時間以秒為單位。而比率是能耗與時間的比值,得出的是計算語言的能耗近似值。另外,各個語言名稱旁邊還有上下箭頭。箭頭代表在根據執行時間對這個表進行排序的過程中,該程式語言上升或下降了多個位。雙線箭頭是同樣的意思,但順序是根據記憶體使用情況的峰值決定的。

當我在社交媒體上看到上面分享的第一個表格時,我認為執行時間的順序也很重要,只不過他們沒有分享。但實際上他們專門做了執行時間的分析。根據我們對指標的了解,例如在二叉樹問題上,C、C++ 和 Rust 給出了最好的結果,但是從記憶體的角度來看,Rust 的性能稍差。另一方面,fannkuch-redux 基準遊戲中的 C 也有著相同的表現。二者沒有明顯的區別。

fasta CLBG 的結果

fasta CLBG 的結果

另一方面,fasta 基準遊戲向我們展示了一個完全不同的表格。各個語言的性能表現得越來越模糊。但這些都是針對特定的情況,因此我們可以分析一下其他結果。

這篇論文還比較了各個類別下的語言,因此你可以比較一下編譯類型以及解釋類型下各個語言的表現。下面給出了這三個類別的語言的測試結果。

不同語言之間的度量衡比較

不同語言之間的度量衡比較

有關這篇文章的討論到此為止,如果你感興趣,可進一步閱讀論文。最終,我們得到的就是下面這張表格(前面分享過):

從最終結果來看

從最終結果來看,似乎 C 語言在能耗和性能方面的表現最優,記憶體除外。但其實它的記憶體表現也不錯。

其次是 Rust 和 C++。因此,我們可以說 C 和 Rust 是最優選擇。然而,這幾種語言不支持物件導向程式設計。(你可以認為Rust支持物件導向程式設計,但它只支持接口(或 Rust 語言中的特徵),而不支持物件導向程式設計結構)。

對於使用物件導向程式設計的各個公司來說,易用性也很重要。老實說,C、C++ 和 Rust的使用難度都不低,你必須考慮生命週期、動態分配等問題。因此,除了編譯語言、虛擬機器語言和解釋語言之外,我們應該把物件導向這個類別也考慮進來。但是,其實前三個類別中也存在很多差異和模糊性。如果將易用性和實現結構也考慮進來,那麼結果將變得更加模糊。

到此為止,我們比較了這些語言的能耗、記憶體需求和測試所需的時間。然而,我們不能僅通過這些指標來決定哪種語言最優。但是,如果添加的指標過多,結果就會變得過於複雜,無法選擇出一種最優的語言,或每種類型中的最優語言。

這裡,我建議改變一下策略,讓我們假設人是非常有邏輯的。通常經濟論文會做這樣的假設,儘管人類並不是特別有邏輯。但是,讓我們假設人類非常有邏輯,而且很挑剔。那麼,我們如何才能選出最優語言呢?首先,我們需要分析程式語言的使用趨勢。如何測量?網上保存了大量程式碼,其中大部分都保存在私人程式碼庫中。我們知道所有開發人員在遇到軟體問題時都會使用搜尋引擎,因此我們可以看看搜尋引擎的統計資料。

Google 的統計結果

Google 的統計結果

Google 的趨勢分析工具是向所有人開放的。我曾使用這個工具來獲取有關程式語言的 Google 搜尋統計資訊,但其中存在一個限制:只能獲取 5 個搜尋關鍵字的資料。因此,首先我們來看看排名前三的語言(C、C++ 和 Rust)以及 Java 的結果。

Google 平臺上自 2004 年以來, C、C++、Rust 和 Java 的趨勢

Java 的使用量似乎超過了其他編譯語言,但 Java 本身的使用量在逐年下降。C 和 C++ 的結果非常接近。但是,Rust 的使用量非常低。這可能是因為它是一種新語言。

公平地說,雖然相對於 C 和 C++ 來說,Rust確實很新,但它是2010 年 7 月發佈的,已經過去12年了,這期間並沒有太大的起伏。這個結果與上述論文給出的結果有很大的不同。下面,除了Java之外,我們再挑選 4 種不同的語言:Kotlin、Javascript、Python 和 Go。

Google 平臺上,自 2004 年以來,Java、JavaScript、Python、Go、Kotlin 的趨勢

這次呈現出的流行趨勢又變了。Python 最初的流行度很低,但如今已成為炙手可熱的程式語言。Java 和 JavaScript 排在第二位。如今的榜首是 Python,下面我們再比較一輪。

Google 平臺上,自 2004 年以來,Python、JavaScript、Ruby、Swift 和 TypeScript 的趨勢

看來最終的贏家是 Python!儘管如此,我們還是應該儘可能客觀。上述,我們只分析了一個搜尋引擎的統計資料,下面,我們來看一看 TIOBE 指數。

TIOBE 指數

TIOBE 指數

TIOBE 是一家專門評估和跟蹤軟體質量的公司。你可以通過他們的網站了解更多相關資訊(https://www.tiobe.com/)。他們的主要服務是測評軟體程式碼庫的質量。他們創建了一個名為TQI(TIOBE Quality Indicator,TIOBE 質量指標)指標,下圖是該指標的一些示例。

該公司創建了一個程式語言指數,名叫「TIOBE指數」。他們利用這個指數,根據搜尋引擎的流行趨勢來衡量程式語言的性能。

該指數最新的結果如下:

該指數最新的結果如下

這與Google流行趨勢給出的結果非常接近。然而,根據這個指數,C是排名第二的程式語言,這有點出乎意料。此外,TIOBE還有一個程式語言性能的歷史表,如下所示:

很明顯,在很長的一段時間裡,程式語言一直是 Java 和 C 的天下。後來,Python 流行起來,躍居榜首。我們需要注意,關鍵在於,流行趨勢是不斷變化的。以前 Java 是第一,如今變成了 Python。

那麼,我們應該如何衡量程式語言未來的潛力呢?

未來的可能性

未來的可能性

在過去的 10 年裡,機器學習和人工智慧一直是熱門話題。Python 是此類數值運算的最佳選擇,因為它有一個很好的 C API。如果你非常注重性能,那麼可以將 Python 與 C、C++ 結合起來。在這種趨勢下,根據 Google 搜尋引擎和 TIOBE 指數的結果來看,Python 是如今使用最廣泛的程式語言。

然而,這並不意味著 Python 的地位保持不變。最近,有一些程式語言展現出了更好的性能,很有可能會取代 Python,比如 Rust。亞馬遜和 Facebook 已經宣佈他們改用 Rust 來開發內部的命令列界面工具。另外,Linux 6.1 版本之後,核心也包含了 Rust。近來 Rust 的呼聲很高,如你所見,它的排名在一年之內從第 26 位上升到了第 20 位。

那麼,我們究竟該如何預測未來呢?

答案

答案

很抱歉,雖然我們花費了大量篇幅討論了這麼多,但實際上這個問題毫無意義。我們不是政客,沒有人給我們預算或金錢支持這些技術趨勢。

那麼,我們為什麼要不停地比較呢?為什麼我們要狂熱地支持一種語言或一種技術呢?答案很簡單,因為我們懶。我們學習了一種程式語言或技術,就希望圍繞這種程式語言或技術建立一個舒適區,然後呆在舒適區內固步自封。

為什麼有人如此狂熱地支持 C 和 C++?因為他們不想學習 Rust 這樣的新語言。而反過來,有人狂熱地支持 Rust,是因為他們不想學 C 和 C++。

說到底,程式語言只是工具,就像螺絲刀一樣。在需要使用圓頭螺絲刀的時候,你就不能一意孤行使用一字螺絲刀。你需要根據實際的情況做決定。沒有任何一種程式語言能夠取代一切,成為終極程式語言。你需要根據當前崗位的要求,選擇使用正確的工具。

☞馬斯克告訴Twitter員工:要麼繼續高強度工作,要麼拿遣散費走人;微信新增刪除聲音鎖功能;Deno 1.28 發佈|極客頭條

☞「我認識一位程式設計師,他拒絕了微軟 100 億美元的收購邀約」

☞價值 7 萬美元的 Bug:只要換張 SIM 卡,兩分鐘就能破解安卓鎖屏?

相關文章

微軟全力擁抱 Java !

微軟全力擁抱 Java !

作者 | 蘇宓 雖然一直以來,微軟的不少產品在很多層面都有使用 Java 語言,但近日其官網上的一則「Microsoft is commit...

Python 與 JavaScript 做比較公平嗎?

Python 與 JavaScript 做比較公平嗎?

在討論應該使用 Python 還是 JavaScript 構建項目時,一般我們都不會說只使用一種程式語言來構建所有的元件。 在現代軟體開發中...

Python 雖已登峰,但尚未造極!

Python 雖已登峰,但尚未造極!

本文來自 CSDN 策劃的《2022 年技術年度盤點》欄目。本欄目將圍繞程式語言、開源、雲端運算、人工智慧、架構服務、資料庫、晶片、開發工具...

載入速度慢?Android Cocos 最佳化實戰

載入速度慢?Android Cocos 最佳化實戰

針對 Cocos 遊戲存在載入速度慢的問題,技術團隊進行了最佳化。不僅僅提升了使用者體驗的提升,而且最佳化了項目結構,還為未來遊戲-原生跨環...

捲土重來?不,Java 一直是王道!

捲土重來?不,Java 一直是王道!

摘要:幾年前,「Java 已死」的話題在程式設計圈內引起廣泛討論,自此之後有關唱衰 Java 的聲音層出不窮。反觀如今各類程式語言排行榜,J...

最強 AI ChatGPT 真要取代程式設計師?

最強 AI ChatGPT 真要取代程式設計師?

【CSDN 編者按】ChatGPT 一出,「程式設計師要失業了」、「程式設計師要下崗了」之聲不絕於耳,引得程式設計師們不由得一陣驚慌,最強 ...

剖析 Netty 內部網路實現原理

剖析 Netty 內部網路實現原理

作者 | 張彥飛allen 來源 | 開發內功修煉 Netty 是一個在 Java 生態裡應用非常廣泛的的網路程式設計工具包,它在 2004...

再見 Java 7!

再見 Java 7!

整理 | 蘇宓 歷時 11 年,Java 7 生命週期終止,Oracle 正式停止對該版本的擴展支持。 隨著官方支持的停止,Java 7 僅...