不要考慮我是 D 編程語言創(chuàng)造者之一的身份。我會(huì)坦誠(chéng)的回答這個(gè)問題。我熟悉 Go語言 和 Rust語言,并且知道 D語言 的缺點(diǎn)在哪里。我鼓勵(lì)人們?cè)?Rust語言 和 Go語言 社區(qū)相似身份的人,也可以提出他們誠(chéng)懇的觀點(diǎn)。接著,我們開始吧。 首先,C++ 在這個(gè)問題中也應(yīng)該被提及。不管它是否取代 C,或是成為取代 C 的候選人之一,C++ 是這個(gè)等式的一個(gè)關(guān)鍵部分。它是最接近 C 的,同時(shí)也是從 C 中來的。在下面幾個(gè)問題中我會(huì)假設(shè) C++ 是把取代 C 作為目標(biāo)的。 每一個(gè)編程語言都有一些基礎(chǔ)優(yōu)勢(shì)(我稱之為“十倍優(yōu)勢(shì)”,因?yàn)樵谝欢ǖ幕鶞?zhǔn)上比其他打確實(shí)效率更高)和數(shù)個(gè)挑戰(zhàn)。這些編程語言在未來能否取代 C 語言,取決于它們?nèi)绾卫盟鼈兊氖秲?yōu)勢(shì),并且如何克服他們的數(shù)個(gè)挑戰(zhàn)。 先來探討 D語言 說起D,就像是領(lǐng)著你在我自己的屋子里游覽, 我知道如何展示/隱藏干凈的/骯臟的角落。跟其他兩個(gè)編程語言相比, 關(guān)于D ,我能說的更多。原因很簡(jiǎn)單: 我了解 D語言 地更深入,直白地說: D語言 的主要挑戰(zhàn)有以下: 采用率不高 – 雖然名義上存在這么多年了。 D語言 圈子里的知情人可能會(huì)說, D語言 當(dāng)前還是相對(duì)新的,且采用率也上漲了不是。 而且,這種看法依然存在, 而采用率是由認(rèn)知驅(qū)動(dòng)的。所以經(jīng)理和軟件開發(fā)人員就覺得采用一種多年還沒有成熟的編程語言很擔(dān)心。 未來, 時(shí)間會(huì)繼續(xù)對(duì) D語言 帶來負(fù)面作用,除非/直到 采用的人數(shù)有突飛猛進(jìn)增長(zhǎng)。 D語言 和垃圾回收故事的微弱聯(lián)系。 垃圾回收是個(gè)偉大發(fā)明,但是用在D 身上的決定卻立即使D 跟核心市場(chǎng) – 現(xiàn)有 C 和C++程序員分離開。對(duì)于這些程序員, 黨派的分割線一貫都是“不想垃圾回收?不是個(gè)事兒,你可用D with RAII 或手動(dòng)管理風(fēng)格! ” 雖然這話沒錯(cuò),但是這很接近于沒用了,因?yàn)闃?biāo)準(zhǔn)庫對(duì)于其他內(nèi)存管理風(fēng)格基本不支持,這就意味這,推定的用戶需要重新建整個(gè)核心基礎(chǔ)設(shè)施。而且,即使覺得使用垃圾回收沒關(guān)系,實(shí)現(xiàn)的質(zhì)量也沒有什么可讓臉上貼金的??傊?,可以這么說, D語言 有 GC 的缺點(diǎn),但是沒有享有他的好處。 一直缺乏前景。 很少有公司支持 D語言,D語言 是靠圈子流行起來的,圈里的工程敏感度高,長(zhǎng)期的前景,魅力和領(lǐng)導(dǎo)力難。很長(zhǎng)一段時(shí)間, D語言 嘗試進(jìn)行影響, 公關(guān),都取得了負(fù)面效果, 第一個(gè)前景文檔 (http://wiki./Vision/2015H1) 是2015 年 1 月寫的, 第二個(gè)迭代 (Vision/2015H2 – D Wiki) 是 4 個(gè)月后,一個(gè)周期是 6 個(gè)月, 這真是最好 的諷刺。
當(dāng)然啦,還有其他的問題, 但是其他問題要么是從這幾個(gè)問題上衍生出來的,要么就是有類似的影響 我認(rèn)為 D 語言 10 倍的優(yōu)勢(shì)有以下(當(dāng)我在下面說”十倍”的時(shí)候,通俗來講意味著”一個(gè)數(shù)量級(jí)”) 比C++快 10 倍的編譯速度。相對(duì)于 C++ 和其他別的編程語言這種差距根本不可彌補(bǔ)。(Go語言 編譯的速度稍微比 D語言 快一點(diǎn),但是運(yùn)行慢一點(diǎn)) 使用系統(tǒng)級(jí)編程語言快速編碼是一種深遠(yuǎn)的變革。結(jié)合 D 語言的抽象能力,基本上可以把 D語言 作為一個(gè)很好的選擇編寫高度優(yōu)化的程序,原因很簡(jiǎn)單,實(shí)驗(yàn)性成本很低。 比腳本編程語言快 10 倍的運(yùn)行速度。D語言 的一個(gè)很好的用處是作為腳本編程語言使用處理一些簡(jiǎn)單任務(wù),這在速度上的好處是巨大的。當(dāng)然,沒有”瓶頸期“的影響-如果一個(gè)腳本增長(zhǎng)的很大,D語言 總是有很有效和模塊化的機(jī)制提供。當(dāng)然,這值得懷疑,比如 Python 已經(jīng)很多的庫可供選擇,但是 10 倍的差距才是根本上的:系統(tǒng)級(jí)編程語言很難達(dá)到 D語言 的水平,但腳本編程語言很難突破與之的速度差距 與 C 和 C++ 結(jié)合使用相對(duì)其他編程語言而言容易10 倍。D語言 使用和 C 和 C++ 相同的內(nèi)存布局;它所做的是在它之上構(gòu)建結(jié)構(gòu),但是更接近底層幾乎沒有花銷,整個(gè) C 的標(biāo)準(zhǔn)庫在語法和速度上不能更接近了,它也同為 C++ 的標(biāo)準(zhǔn)庫,許多 C 的庫都很容易和 D語言 結(jié)合使用。(https://github.com/D-Programming-Deimos)。它可以聲稱沒有其他編程語言能達(dá)到它整合的水平 相比其他的系統(tǒng)級(jí)編程語言,產(chǎn)生式編程好上10倍。D語言 的靜態(tài)內(nèi)省,編譯時(shí)間的評(píng)價(jià),混合驅(qū)動(dòng)程序變的很有效這對(duì)其他編程語言是很困難的,無論是新的還是現(xiàn)存的;在這場(chǎng)游戲中,Go語言 缺乏深度甚至不能抓住重點(diǎn);C++還在絕望的迷失之中;而 Rust語言 還在嘗試之中。
說一下Go語言 這里再重申一下,Go 語言是我唯一的選擇,值得你為其付出。選擇 Go語言 主要有下面這些挑戰(zhàn): 間接調(diào)用和垃圾收集帶來的本質(zhì)上的性能下降。事實(shí)上,把 Go語言 改造成沒有間接函數(shù)調(diào)用和垃圾收集是沒有意義的,因?yàn)檫@些是其核心的功能。這些是提高核心性能指標(biāo)的主要障礙。Go語言 團(tuán)隊(duì)的回應(yīng)是,戰(zhàn)術(shù)上會(huì)提高垃圾收集的性能。不過,替換 C 語言這樣的挑戰(zhàn)不是通過一些戰(zhàn)術(shù)就可以完成的。 政治因素。 Go語言 的派別異常強(qiáng)大,在不少問題上都各有堅(jiān)持,類似的問題有大有小。在比較大的問題中,泛型的實(shí)現(xiàn)方式非常笨拙而低下,使得泛型可以算是 Go語言的短板之一;在類似話題上的討論上,都足以讓人郁悶不已。我認(rèn)為技術(shù)問題的政治因素在長(zhǎng)期是一個(gè)極端的破壞因素,希望 Go語言 團(tuán)隊(duì)能找到解決的方式。 簡(jiǎn)化卻過于簡(jiǎn)化。Go 語言的精簡(jiǎn)是很有名的 – 大家上手起來確實(shí)都很快。不過隨著時(shí)間推移,這成為一個(gè)問題;Go語言 程序徹底慢下來 – 程序員發(fā)現(xiàn)整天在寫同樣的東西,就像一只螞蟻?zhàn)龅哪菢?,這是因?yàn)?Go 語言即使對(duì)很簡(jiǎn)單的觀念和算法也沒法很好的進(jìn)行抽象。如果一個(gè)領(lǐng)域沒有現(xiàn)成的易用的庫,一般人是很難進(jìn)入的。程序員要是用過 Go語言 之后再也不想用了,那感覺真不好。如果 Go語言 能讓那些總是重復(fù)工作的用戶改善一下處境就好了。
我認(rèn)為的 Go語言 的10倍優(yōu)勢(shì)如下: 10倍更好的策略。有一段時(shí)間 Go 語言宣稱要成為系統(tǒng)編程語言,不過后來它的屬地完全變成網(wǎng)絡(luò)服務(wù)領(lǐng)域。這是一個(gè)前景非常光明的市場(chǎng),Go語言 團(tuán)隊(duì)對(duì)此把握的很好(Go語言 團(tuán)隊(duì)有著這方面的世界級(jí)的軟件開發(fā)人員)。這個(gè)市場(chǎng)非常熱,一直由 Java EE 和一些運(yùn)行緩慢的腳本語言占據(jù)著,Go語言 在這個(gè)領(lǐng)域完全就是全新的選擇,不過現(xiàn)在已經(jīng)成為一個(gè)主要的選擇,其低位已經(jīng)不可替代了。 工程上的10倍優(yōu)勢(shì)。 Go 語言背后有一個(gè)純粹的軟件開發(fā)團(tuán)隊(duì),這對(duì)編程語言的質(zhì)量起著很大的幫助,尤其是對(duì)于網(wǎng)絡(luò)庫和工具。優(yōu)秀的工程管理很好的彌補(bǔ)了編程語言能力上的一些不足。 10倍的品牌效應(yīng)。很多打算使用 Go 語言的用戶都是看在 Google 的份上。Google 出品,似乎就意味著專業(yè)、高質(zhì)量和穩(wěn)定。當(dāng)然,品牌不是全部,不過這意味著 Go 語言只需要做到不錯(cuò)就行,不需要做到完美。品牌可以完成剩下的任務(wù)。
最后但并非最不重要的 Rust語言 讓我再次提醒,這僅僅是我的意見。我認(rèn)為 Rust語言 正面臨一些有趣的挑戰(zhàn): 不太和諧的個(gè)性。閱讀任何數(shù)量的 Rust語言 程序讓人想起這個(gè)笑話“朋友別讓朋友翹腿的一天”的漫畫圖像(https://www.google.com/search?q=..)。把軀干放在瘦腿上的人。Rust語言 把安全、精確的內(nèi)存管理置于其它一切之上。很少的問題域,這意味著思考和編碼的大部分瑣碎的類似基本文書的工作(GC 語言實(shí)際上自動(dòng)化消失了)。安全的,確定的內(nèi)存回收是個(gè)大問題,但并不是唯一的問題或者是程序中最重要的問題。因此 Rust語言 在這個(gè)編程語言設(shè)計(jì)問題上消耗巨大。這是有趣的,Rust語言 開始成長(zhǎng)的其他方面的編程語言;唯一的解決方案是發(fā)展編程語言,但問題仍然是抽象能否幫助處理各級(jí)資源的必要性。 外國(guó)的語法。Rust語言 的語法是不同的,是沒有明顯優(yōu)勢(shì)的差異。這是人來自 Algol-style 刺激性編程語言,需要處理一個(gè)無緣無故地不同的語法來保證正確的資源簿記。
Rust語言 的 10 倍優(yōu)勢(shì)是: 理論上要比其他快 10 倍。在三者之中,Rust語言 是其中唯一一款有世界一流水平的編程語言。這些在它精確定義的編程語言和技術(shù)方法的深度都可以看得出。 比其他系統(tǒng)程序設(shè)計(jì)編程語言好上 10 倍的安全性。當(dāng)然,在這里我們只限于討論它在安全上的開支。 性價(jià)比要比其他好 10 倍。在很長(zhǎng)一段時(shí)間里,Rust語言 的 1.0 預(yù)覽版都是社區(qū)的寵兒,沒有一點(diǎn)錯(cuò)誤:無論發(fā)生什么問題,現(xiàn)有的 Rust語言 或者將來的 1.0 版本都會(huì)有解決的辦法?,F(xiàn)在,1.0 版本已經(jīng)結(jié)束了蜜月期,人們的興趣發(fā)生了很明顯的下降(據(jù)我個(gè)人測(cè)算和估計(jì)),但是它的影響仍將繼續(xù)存在。此外,畢竟,Rust語言 是一個(gè)正統(tǒng)的有實(shí)用價(jià)值的編程語言,它很容易將人們的熱情轉(zhuǎn)化實(shí)體的銷售。
總而言之 無論是這幾種編程語言被定位于逐步替換 C、C++ ,或者同時(shí)存在于程序庫中,還是它們會(huì)成為未來項(xiàng)目的首選,今天的人們還是會(huì)首先選擇 C 或 C++——這一切都取決于這些編程語言的能力,盡量發(fā)揮它們的長(zhǎng)處并且在各自的挑戰(zhàn)中獲得突破。
|