【CSDN 編者按】數(shù)百種編程語言層出不窮,關(guān)于誰優(yōu)誰劣的爭議也未曾斷過,但為何總有這種爭論的出現(xiàn),本文作者直擊要害地解析道:「答案很簡單,因?yàn)槲覀儜小.?dāng)大家學(xué)習(xí)了一種編程語言或技術(shù)之后,就希望圍繞這種編程語言或技術(shù)建立一個舒適區(qū),然后待在舒適區(qū)內(nèi)固步自封」。
不過,在競爭日趨激烈的環(huán)境下,這樣的做法顯然不可取,那么,未來極具潛力的編程語言到底有哪些呢?不妨通過本文的數(shù)據(jù)對比一探究竟。
原文鏈接:https://medium.com/codex/the-programming-language-s-of-the-future-24af5cfa8479
聲明:本文為 CSDN 翻譯,未經(jīng)允許,禁止轉(zhuǎn)載。
作者 | Ugur Yagmur
譯者 | 彎月 責(zé)編 | 屠敏
出品 | CSDN(ID:CSDNnews)
我喜歡閱讀有關(guān)編程的提問和解答。最近,我經(jīng)常看到以下這類問題:
-
哪種技術(shù)會取代 JAVAScript?
-
Kotlin 有機(jī)會取代 Java 嗎?
-
Rust 會取代 C++ 嗎?
-
哪種語言最有希望取代 C?是 D、Go 還是 Rust?
我特別喜歡最后一個提問,因?yàn)樘釂栴}的人非常確信 C 語言會被取代,還給出了備選答案。我認(rèn)為,自從學(xué)術(shù)論文《Energy Efficiency across Programming Languages》(《編程語言的能耗》:https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf)發(fā)表以來,這類問題的討論越來越頻繁。我認(rèn)為,所有這些問題最終都可以歸結(jié)為一個常見的問題:將來我們會使用哪些編程語言?
在本文中,我將引用上述論文的一些結(jié)果,并分析一些其他的統(tǒng)計(jì)信息,看看能不能找到這個問題的答案。首先申明,我會盡可能拋開個人偏見,保持客觀。下面,我們首先來看一看這篇論文。
《編程語言的能耗》論文
如果看過上述論文,你可能對下面這張表格不陌生:
編程語言的比較,來源《編程語言的能耗》論文
我見過很多次,各大社交媒體平臺上都有人分享這張表格,相信幾乎無人不知。但是,在深入研究結(jié)果之前,我想先分享一些背景信息。
關(guān)于論文得出的這些結(jié)果,首要問題是這些結(jié)果是如何測量的。普遍接受的測量 CPU 性能的方法是基準(zhǔn)測試。論文的作者也針對多種編程語言實(shí)施了基準(zhǔn)測試,他們采用了 10 個不同的編程問題,然后通過這些語言解決這些問題,統(tǒng)一采用了“計(jì)算機(jī)語言基準(zhǔn)測試游戲”中定義的算法。下表給出了這些算法及其數(shù)據(jù)大小:
CLBG 的程序庫
此外,他們還根據(jù)下表中給出的范例對編程語言進(jìn)行了分類:
然而,性能測試并沒有考慮到編程范式,重要的是編程語言的類型:編譯型、解釋型,還是使用了虛擬機(jī)?編譯語言、虛擬機(jī)語言和解釋語言之間存在明顯的性能以及能耗差異。因此,他們針對各個類別,采用這些算法進(jìn)行測試,這種做法是正確的。
下一步是執(zhí)行計(jì)算機(jī)語言基準(zhǔn)測試。他們分享了幾個問題的結(jié)果,我們來看一看。
兩個 CLBG 的結(jié)果
能耗的測量以焦耳為單位,時間以秒為單位。而比率是能耗與時間的比值,得出的是計(jì)算語言的能耗近似值。另外,各個語言名稱旁邊還有上下箭頭。箭頭代表在根據(jù)執(zhí)行時間對這個表進(jìn)行排序的過程中,該編程語言上升或下降了多個位。雙線箭頭是同樣的意思,但順序是根據(jù)內(nèi)存使用情況的峰值決定的。
當(dāng)我在社交媒體上看到上面分享的第一個表格時,我認(rèn)為執(zhí)行時間的順序也很重要,只不過他們沒有分享。但實(shí)際上他們專門做了執(zhí)行時間的分析。根據(jù)我們對指標(biāo)的了解,例如在二叉樹問題上,C、C++ 和 Rust 給出了最好的結(jié)果,但是從內(nèi)存的角度來看,Rust 的性能稍差。另一方面,fannkuch-redux 基準(zhǔn)游戲中的 C 也有著相同的表現(xiàn)。二者沒有明顯的區(qū)別。
fasta CLBG 的結(jié)果
另一方面,fasta 基準(zhǔn)游戲向我們展示了一個完全不同的表格。各個語言的性能表現(xiàn)得越來越模糊。但這些都是針對特定的情況,因此我們可以分析一下其他結(jié)果。
這篇論文還比較了各個類別下的語言,因此你可以比較一下編譯類型以及解釋類型下各個語言的表現(xiàn)。下面給出了這三個類別的語言的測試結(jié)果。
不同語言之間的度量衡比較
有關(guān)這篇文章的討論到此為止,如果你感興趣,可進(jìn)一步閱讀論文。最終,我們得到的就是下面這張表格(前面分享過):
從最終結(jié)果來看,似乎 C 語言在能耗和性能方面的表現(xiàn)最優(yōu),內(nèi)存除外。但其實(shí)它的內(nèi)存表現(xiàn)也不錯。
其次是 Rust 和 C++。因此,我們可以說 C 和 Rust 是最優(yōu)選擇。然而,這幾種語言不支持面向?qū)ο缶幊獭#憧梢哉J(rèn)為Rust支持面向?qū)ο缶幊蹋恢С纸涌冢ɑ?Rust 語言中的特征),而不支持面向?qū)ο缶幊探Y(jié)構(gòu))。
對于使用面向?qū)ο缶幊痰母鱾€公司來說,易用性也很重要。老實(shí)說,C、C++ 和 Rust的使用難度都不低,你必須考慮生命周期、動態(tài)分配等問題。因此,除了編譯語言、虛擬機(jī)語言和解釋語言之外,我們應(yīng)該把面向?qū)ο筮@個類別也考慮進(jìn)來。但是,其實(shí)前三個類別中也存在很多差異和模糊性。如果將易用性和實(shí)現(xiàn)結(jié)構(gòu)也考慮進(jìn)來,那么結(jié)果將變得更加模糊。
到此為止,我們比較了這些語言的能耗、內(nèi)存需求和測試所需的時間。然而,我們不能僅通過這些指標(biāo)來決定哪種語言最優(yōu)。但是,如果添加的指標(biāo)過多,結(jié)果就會變得過于復(fù)雜,無法選擇出一種最優(yōu)的語言,或每種類型中的最優(yōu)語言。
這里,我建議改變一下策略,讓我們假設(shè)人是非常有邏輯的。通常經(jīng)濟(jì)論文會做這樣的假設(shè),盡管人類并不是特別有邏輯。但是,讓我們假設(shè)人類非常有邏輯,而且很挑剔。那么,我們?nèi)绾尾拍苓x出最優(yōu)語言呢?首先,我們需要分析編程語言的使用趨勢。如何測量?網(wǎng)上保存了大量代碼,其中大部分都保存在私人代碼庫中。我們知道所有開發(fā)人員在遇到軟件問題時都會使用搜索引擎,因此我們可以看看搜索引擎的統(tǒng)計(jì)數(shù)據(jù)。
google 的統(tǒng)計(jì)結(jié)果
Google 的趨勢分析工具是向所有人開放的。我曾使用這個工具來獲取有關(guān)編程語言的 Google 搜索統(tǒng)計(jì)信息,但其中存在一個限制:只能獲取 5 個搜索關(guān)鍵字的數(shù)據(jù)。因此,首先我們來看看排名前三的語言(C、C++ 和 Rust)以及 Java 的結(jié)果。
Google 平臺上自 2004 年以來, C、C++、Rust 和 Java 的趨勢
Java 的使用量似乎超過了其他編譯語言,但 Java 本身的使用量在逐年下降。C 和 C++ 的結(jié)果非常接近。但是,Rust 的使用量非常低。這可能是因?yàn)樗且环N新語言。
公平地說,雖然相對于 C 和 C++ 來說,Rust確實(shí)很新,但它是2010 年 7 月發(fā)布的,已經(jīng)過去12年了,這期間并沒有太大的起伏。這個結(jié)果與上述論文給出的結(jié)果有很大的不同。下面,除了Java之外,我們再挑選 4 種不同的語言:Kotlin、JavaScript、Python/ target=_blank class=infotextkey>Python 和 Go。
Google 平臺上,自 2004 年以來,Java、JavaScript、Python、Go、Kotlin 的趨勢
這次呈現(xiàn)出的流行趨勢又變了。Python 最初的流行度很低,但如今已成為炙手可熱的編程語言。Java 和 JavaScript 排在第二位。如今的榜首是 Python,下面我們再比較一輪。
Google 平臺上,自 2004 年以來,Python、JavaScript、Ruby、Swift 和 TypeScript 的趨勢
看來最終的贏家是 Python!盡管如此,我們還是應(yīng)該盡可能客觀。上述,我們只分析了一個搜索引擎的統(tǒng)計(jì)數(shù)據(jù),下面,我們來看一看 TIOBE 指數(shù)。
TIOBE 指數(shù)
TIOBE 是一家專門評估和跟蹤軟件質(zhì)量的公司。你可以通過他們的網(wǎng)站了解更多相關(guān)信息(https://www.tiobe.com/)。他們的主要服務(wù)是測評軟件代碼庫的質(zhì)量。他們創(chuàng)建了一個名為TQI(TIOBE Quality Indicator,TIOBE 質(zhì)量指標(biāo))指標(biāo),下圖是該指標(biāo)的一些示例。
該公司創(chuàng)建了一個編程語言指數(shù),名叫“TIOBE指數(shù)”。他們利用這個指數(shù),根據(jù)搜索引擎的流行趨勢來衡量編程語言的性能。
該指數(shù)最新的結(jié)果如下:
這與Google流行趨勢給出的結(jié)果非常接近。然而,根據(jù)這個指數(shù),C是排名第二的編程語言,這有點(diǎn)出乎意料。此外,TIOBE還有一個編程語言性能的歷史表,如下所示:
很明顯,在很長的一段時間里,編程語言一直是 Java 和 C 的天下。后來,Python 流行起來,躍居榜首。我們需要注意,關(guān)鍵在于,流行趨勢是不斷變化的。以前 Java 是第一,如今變成了 Python。
那么,我們應(yīng)該如何衡量編程語言未來的潛力呢?
未來的可能性
在過去的 10 年里,機(jī)器學(xué)習(xí)和人工智能一直是熱門話題。Python 是此類數(shù)值運(yùn)算的最佳選擇,因?yàn)樗幸粋€很好的 C API。如果你非常注重性能,那么可以將 Python 與 C、C++ 結(jié)合起來。在這種趨勢下,根據(jù) Google 搜索引擎和 TIOBE 指數(shù)的結(jié)果來看,Python 是如今使用最廣泛的編程語言。
然而,這并不意味著 Python 的地位保持不變。最近,有一些編程語言展現(xiàn)出了更好的性能,很有可能會取代 Python,比如 Rust。亞馬遜和 Facebook 已經(jīng)宣布他們改用 Rust 來開發(fā)內(nèi)部的命令行界面工具。另外,linux 6.1 版本之后,內(nèi)核也包含了 Rust。近來 Rust 的呼聲很高,如你所見,它的排名在一年之內(nèi)從第 26 位上升到了第 20 位。
那么,我們究竟該如何預(yù)測未來呢?
答案
很抱歉,雖然我們花費(fèi)了大量篇幅討論了這么多,但實(shí)際上這個問題毫無意義。我們不是政客,沒有人給我們預(yù)算或金錢支持這些技術(shù)趨勢。
那么,我們?yōu)槭裁匆煌5乇容^呢?為什么我們要狂熱地支持一種語言或一種技術(shù)呢?答案很簡單,因?yàn)槲覀儜小?strong>我們學(xué)習(xí)了一種編程語言或技術(shù),就希望圍繞這種編程語言或技術(shù)建立一個舒適區(qū),然后呆在舒適區(qū)內(nèi)固步自封。
為什么有人如此狂熱地支持 C 和 C++?因?yàn)樗麄儾幌雽W(xué)習(xí) Rust 這樣的新語言。而反過來,有人狂熱地支持 Rust,是因?yàn)樗麄儾幌雽W(xué) C 和 C++。
說到底,編程語言只是工具,就像螺絲刀一樣。在需要使用圓頭螺絲刀的時候,你就不能一意孤行使用一字螺絲刀。你需要根據(jù)實(shí)際的情況做決定。沒有任何一種編程語言能夠取代一切,成為終極編程語言。你需要根據(jù)當(dāng)前崗位的要求,選擇使用正確的工具。