D語言架構師Andrei Alexandrescu談D、Go、Rust取代C/C++

jopen 9年前發布 | 28K 次閱讀 D語言

英文原文:Which language has the brightest future in replacement of C between D, Go and Rust? And Why?

本文是D語言聯合創始人、架構師 Andrei Alexandrescu 在問答 Quora 上關于“在取代C語言的道路上,D、Go 和 Rust 誰的前途最光明?為什么?”提問的回答,他從自己的角度談及了D、Go 和 Rust 在取代C/C++語言的優劣勢,以及這三種語言的未來。

以下為譯文:

作為D語言的聯合創始人之一,盡管我的身份來回答這個問題顯得有點不合適,但是我仍會盡可能客觀地回答這個問題。我關注著 Go 和 Rust 的發展,同時我也知道D語言的缺點。在 Go 和 Rust 社區中,我一直鼓勵同行的朋友分享他們的真實想法,所以在這里也一如既往。

首先,C++在這個問題上處在一個特殊的位置,無論它是否會像C一樣被取代,亦或是成為替代C的語言,C++都是程序語言領域中的一個關鍵部分。

C++是最接近C的語言,安裝配置的方式也明顯相似,鑒于 C++ 的年齡,下面我假設標題的問題也將 C++ 語言列入替代C語言的語言列表中。

每一種語言都有一些它最根本的優勢(我稱之為“十倍優勢”,指在這方面它比其他語言高幾個等級)和一些它要面對的挑戰。 這些語言的未來如何,以及它們是否能夠取代C語言,取決于它們使用什么策略來利用好自己的“十倍優勢”,以及它們如何克服他們所面對的各種挑戰。

D語言

顯然,這對于我來說輕車熟路,所以我知道如何在你面前秀出D語言設計的亮點之處,也知道如何帶著你繞開D語言設計的不好之處。相比 Go 和 Rust 我更了解D語言,所以我可能會更多地去談論D語言。坦白而言,D語言所面對的主要挑戰是如下:

  • 存在多年卻一直沒有被業界廣泛采用。D社區內的一些業內人士有資格這樣說(D當前還是相對比較年輕的一門語言, 而且它的市場占用率也確實在逐漸增加),然而觀念很難改變,同時觀念也支配著市場占有率,因此管理者和工程師很難去接受一門在很長時間內都沒有取得成功的 語言,更進一步地說,如果短期之內D語言不能取得市場占有率的明顯提升,那么時間的流逝將對D語言更加不利。

    </li>

  • D語言同垃圾收集器的關系。GC 是一項偉大的發明,但是將其用于D語言的決定使D遠離了核心市場(也就是現有的C和 C++ 開發人員)。對于C和 C++ 程序員,歷史悠久的主流思想是不使用 GC,或者是在D中使用 RAII 或手工管理內存。盡管如此,由于標準庫存對于其它的內存管理方式缺乏支持,以至于它形同虛設,需要用戶自己去實現底層的基礎設施,所以不使用 GC 而使用其它的內存管理方式在D語言中的意義不大。此外,對于那些愿意使用 GC 的人,其實現質量也是乏善可陳。整體而言,D持有由 GC 導致的缺點,卻沒有獲得 GC 帶來的好處。

    </li>

  • 缺乏遠見。缺乏企業的支持,D一直是社區驅動,工程智慧比長期愿景更容易找到魅力和領導能力。在很長一段時間內,D的推廣和公關做的都不好。第一個愿景文檔(http://wiki.dlang.org/Vision/2015H1)是定在 2015 年 1 月 1 日,下一個迭代(Vision/2015H2 - DWiki)已經晚了 4 個月,持續了 6 個月的迭代周期已最好的諷刺。

    </li> </ul>

    當然D語言還有其它問題,但是它們要么由上面的問題所衍生,要么影響比較小。

    我認為D語言的“10 倍”優勢在以下幾方面(在接下的部分當我的說到"10x"時,通俗的理解是一個數量級):

    • 同等規模的代碼,D語言的編譯速度比 C++ 快。編譯速度上的差距對于 C++ 而言根本就不可能彌補,其他語言要想追趕上D也是比登天還難。(Go 的編譯速度比D略微快一點,但是生成的代碼運行效率更慢一點)使用系統級的語言快速的構建代碼,這是一種具有深遠意義的變革。D語言的高度抽象能力使它成 為編寫高度優化代碼的一很好的選擇,因為實驗成本很低。

      </li>

    • 比同等開發效率的腳本語言快。使用D語言的一個好處是可以像使用腳本語言一樣便利地去處理各種日常的事務。構建 /運行的過程非常快,并且速度的提升是非常明顯的,同時D語言沒有“碰壁效應(hitting the wall)”,如果腳本變得非常巨大,D總是有其它的如模塊化這樣的機制來提供對于速度優化的支持。當然,這種比較前提是基于相似的顆粒度,像 Python 有更多的可直接使用的庫資源,但是一個數量級的差距是根本存在的:系統級編程語言很難達到D語言的水平,而腳本語言又無法在速度上縮小與D語言的差距。

      </li>

    • 與C和 C++ 的交互比其它語言容易。D使用與C和 C++ 相同的內存布局,它所做的一切其它的工作都是建立在這個基礎上,同時底層能做到零開銷讀取。整個C標準庫都可以在不做特殊的語法處理的情況下實現無運行損 耗的去訪問,對于 C++ 標準庫要達到同樣的支持,還有一些工作要做,還有許多C庫可以直接支持(https://github.com/D-Programming-Deimos),甚至可以這樣說,沒有其它語言能夠達到D語言的集成水平。

      </li>

    • 在泛型編程方面比其它系統級語言好。D語言的靜態內省、編譯時計算、minedin-deriven 代碼生成構成一個強大的組合,而這在其它語言里是很難正確做到的。在這方面,Go 沒有任何深度,因為它直接不提供這個功能。C++17 也絕望地迷失了方向,Rust 則是剛剛企圖涉足。

      </li> </ul>

      Go 語言

      申明一下,下面都是我的個人觀點。我認為 Go 語言要面對以下挑戰:

      • 由于間接調用和垃圾回收機制而導致的根本性緩慢。Go 語言的一個核心特征是不借用間接的函數調用和垃圾回收機制幾乎無法寫出有意義的代碼,而這也正是 Go 在實現核心性能道路上所面對的主要障礙,Go 團隊對于這一點作出的應對是戰術性的,例如他們采取的措施是在實現更好的垃圾收集器方向展開工作,但是我認為 Go 對C的這種戰術性的挑戰是很難取得成功的。

        </li>

      • 政治。Go 所走的路線在一些問題上持有極其強硬和死板態度,這些問題有大有小。在比較大的方面,泛型編程被嚴格控制,甚至貶低到只有"N"個字;有關泛型編程的討論 都是試圖去勸阻任何有意義的嘗試,這已經足夠讓人覺得恥辱。從長遠來看,技術問題的政治化是一種極其有害的模式,所以希望 Go 社區能夠找到修正它的方法。

        </li>

      • 從簡單到簡單化。Go 是出了名的簡單,有很多人們快速學習使用它的事跡。然而隨著時間的推移,這也同樣成了一個問題。Go 程序員是沒有希望的過路人,他們發現自己一次又一次寫著相同的東西,由于 Go 甚至無法對最簡單的概念和算法進行抽象。沒有被庫很好地支持的區域是很難進入的,這在使用 Go 開發了一個項目并永遠不再想使用 Go 的開發者中是一個強烈的反映。如果 Go 能夠使開發中的“回頭客”過的更好,那將是非常偉大的。

        </li> </ul>

        在我看來,Go 語言的十倍優勢如下:

        • 策略更好。在短暫的定位于系統編程語言之后,它將自己定位于網絡基礎服務設施領域,這是一個明智的營銷舉措,結 合了 Go 團隊的技術優勢(這個世界上最好的網絡服務開發工程師),作為一個市場熱點,網絡服務開發領域一直被 JavaEE 和其它一些緩慢的腳本語言統治著,Go 為這個領域帶來了一股新的氣息,現在 Go 是這個領域的一個主要成員,并且它的地位很難被取代。

          </li>

        • 工程性好。Go 的背后有一個堅實的工程技術團隊,他們保證了 Go 語言,以及其網絡庫和工具的質量。直到目前為止,良好的工程性已經彌補了 Go 語言本身的很多不足之處。

          </li>

        • 品牌好。我們中的很多人都得承認 Go 的一個重要推廣因素是它與 Google 的關系,這使得人們對于它的專業性、質量和穩定性有更多的信心。當然品牌不是萬能的,但是那意味著 Go 只需要成為一個體面的語言,它不需要成一個“夢幻”般的語言,因這品牌會去幫助它推廣。

          </li> </ul>

          Rust 語言

          讓我再次強調一下,這只是我的個人看法。我認為 Rust 面臨著一些有趣的挑戰:

          • 一個不和諧的特性。閱讀任何數量的 Rust 代碼都能讓人想起這個笑話“朋友們不要讓朋友跳腿日”和體格強壯的男人躺在廋腿上休息的漫畫形象。Rust 把安全、精確的內存管理作為一切的中心放在首位。不幸的是,這在其他語言中幾乎都算不上問題。它意味著思考和編碼的工作的很大一部分內容將是致力于一份類 似文職的工作(而 GC 卻可以讓這一部分內容自動淡出人們的視線),安全、確定地進行內存回收是一個困難的問題,但并不是唯一的問題,在編程中它也不是最重要的問題。因 此,Rust 為解決這個問題花費了不成比例的語言設計成本,有趣的是 Rust 在其他方面也慢慢成長起來。讓 Rust 在個性上更和諧的唯一解決方案是在語言發展的過程中,引入其它抽象機制來幫助解決煩人的資源管理的問題。

            </li>

          • 另類的語法。Rust 的語法比較獨特,但是這種語法的差異并沒有明顯的優勢,它的語法讓來自于 Algol 語法風格的人們覺得非常難受。

            </li> </ul>

            Rust 的十倍優勢如下:

            • 理論優勢。在三個語言中,Rust 是唯一的由世界級 PL 理論家領銜的語言,這可以通過其語言的精確定義和其技術方法的深度得到驗證。
            • 安全性好。當然我前面只是討論了一下這樣做的成本。
            • 公關好。當 Rust 在社區中深受喜愛和幾乎不會出錯時,pre-1.0 已經有很長一段時間了。無論什么時候出現問題,Rust 要么自己解決,要么通過 1.0 解決。1.0 的發布結束了 Rust 和大眾的蜜月期,據我的測量和評估,人們對于 Rust 的普遍熱情會有一定程度的下降,但是 Rust 終究是一門體面的語言,它有實物來應對并且建立一個良好推廣模式。
            • </ul>

              總結

              哪一種語言都能取代C、C++,亦或者是共存,甚而哪一種語言更好,但大多數情況下,在實際的項目中都還是默認選擇了C或者C++,至于哪一種語言是項目的更好選擇,這取決于幾個語言在項目中的特有長處。


              附 Andrei Alexandrescu 介紹:

              D語言架構師Andrei Alexandrescu談D、Go、Rust取代C/C++

              世界頂尖的 C++ 專家,2001 年撰寫了經典名著《C++設計新思維》(Modern C++ Design),曾榮獲 2001 年最佳 C++ 圖書稱號,書中所開發的 Loki 已經成為最負盛名的 C++ 程序庫之一。他被認為是新一代 C++ 的代表人物,因為對 Template 技術的精湛運用,震撼了整個 C++ 社群,開辟了 C++ 編程領域的“Modern C++”新時代。他還與 Herb Sutter 合著了《C++編程規范》(C++ Coding Standards)。他花了 8 年的時間攻讀機器學習方面的博士學位,專門研究部分自然語言處理結構。自 2006 年開始,他與D語言的最初設計者及實現者 Walter Bright 緊密合作,設計和實現D語言及其標準庫,他是D語言很多特性的設計者,也是大多數D語言標準庫的作者。Andrei Alexandrescu 在工業界和學術界都有很高的聲譽。現為 非死book 研究員。


              譯者/魏緒文審校/賴信濤責編/錢曙光

              來自: CSDN
               本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
               轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
               本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!