農林漁牧網

您現在的位置是:首頁 > 畜牧業

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

2022-08-06由 量子位 發表于 畜牧業

github是什麼

Alex 發自 凹非寺

量子位 | 公眾號 QbitAI

今年的CPP North C++大會上,谷歌宣佈了一門新的程式語言

Carbon

,並稱其將是

“C++的繼任者”

谷歌將其在GitHub上開源。雖然這個語言目前還處於實驗階段,但還是很快吸了引眾多程式設計師前來圍觀,還一度登上了

GitHub趨勢榜第一

,現已收穫標星21。3k。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

對於谷歌方開發者稱Carbon是C++的繼承者一事,有國外媒體詢問了

C++之父

Bjarne Stroustrup的看法,老爺子表示:

這些年總是有新的語言試圖成為C++的繼承者,我歡迎對程式語言和程式設計風格進行實驗;

Carbon太新且規範不足

,我無法真正做出有意義的技術評論。而通常在不開發全新語言規則、庫和管理方案的情況下,很難提供C++的替代方案。

所以谷歌團隊為什麼非要搞一個C++“替代版”而不是繼續完善現有的C++?畢竟他們自己內部都在廣泛使用這個語言。

為什麼不去升級C++?

對此,帶領團隊開發Carbon的谷歌工程師錢德勒·卡魯斯

(Chandler Carruth)

解釋稱,C++至今已有40歲了,其自身的很多問題困擾著現在的開發人員。

數十年來,C++已積累了許多技術負債。其維護者優先考慮

向後相容

,以便繼續支援廣泛使用的專案,但這樣容易導致程式碼量巨大。

而且C++雖然有開源的編譯器

(如gcc)

,但也有不少閉源編譯器,其中的某些功能可能要過很久才能改善升級。

此外,C++語言的發展也受到了官僚委員會管理程式的阻礙,該程式以標準化而非設計為導向,這種做法導致很難給其新增新功能。

解決這些問題的最佳方法是避免直接繼承C或C++的“遺產”,而是從語言基礎開始,例如:現代泛型系統、模組化程式碼組織、一致的簡單語法等。

卡魯斯也在CPP大會上提到,該語言並不是為了和C++未來改進版本競爭,而是——

“探索用C++做不到的事”

正如微軟建立TypeScript來更新JavaScript那樣,Carbon作為一種在C++基礎上開發的新語言,將為更多開發者解決記憶體安全和泛型等問題,來彌補C++的不足。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

目前Carbon語言的亮點包括:

Introducer關鍵字和簡單語法;

函式輸入引數為只讀值;

指標提供間接訪問和變體;

使用表示式命名型別;

透過包名匯入APIs;

強大且經過定義檢查的泛型

……

此外,谷歌正在繼續開發Carbon以支援以下功能:

效能關鍵型軟體;

軟體和語言的演變;

易於閱讀、理解和編寫的程式碼;

實用的安全和測試機制;

快速且可擴充套件的開發;

現代作業系統平臺、硬體架構和環境;

與現有C++程式碼的互操作性和遷移性。

開發團隊還將建立一個內建包管理器,這是C++中非常缺乏的。

舉個簡單的例子:用C++程式碼和Carbon程式碼分別計算半徑為1和2的兩個圓面積之和。二者對比如圖:

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

△圖源:GitHub;左為C++程式碼,右為Carbon程式碼

下圖展示了Carbon和C++互通性。程式設計師可以在Carbon上呼叫C++庫、方法和函式,而不需要額外的開銷,反之亦然。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

不過至於安全問題,Carbon並沒有一開始就建立記憶體安全系統。

卡魯斯介紹說,由於C++記憶體安全性很差,所以Carbon的研發起點很低,該專案優先考慮的是遷移而不是安全;希望以後Carbon至少可以和Go或Swift一樣安全。

事實上,在Carbon之前,Mozilla

(就是開發火狐那個)

於2015年就釋出了一個也標榜自己為“C++繼承者”的語言:

Rust

,而且這個Rust很注重記憶體安全性。

那為什麼不大力發展Rust呢?

“Carbon是為有大量C++庫者準備的”

卡魯斯在CPP會議上對此迴應稱,C++和Rust之間的銜接性不好,要將C++的生態系統轉移到Rust非常困難。

對於那些已經擁有大量C++程式碼庫的開發者來說,要把自己之前的東西搬到Rust編輯器上就很麻煩了。

而Carbon被設計成一種C++的後繼語言,它以後將實現和C++無縫連線,並具備與C++的雙向互操作性,這對於有大量C++程式碼庫者非常友好。

對於那些沒有這種“煩惱”的程式設計師們,卡魯斯表示,想用Rust的話就繼續用好了。

網友紛紛圍觀

前來圍觀Carbon的一眾網友中,有人表示支援谷歌開發這個新語言:

若能在這裡直接呼叫C語言庫的低層級Stuff函式,而不需在開頭加行extern “C”,是很了不起的。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

有人認同其簡化語言和提升安全性的目標,但他覺得要在現有的語言中改進記憶體安全並不太容易,現有的C++特徵和API很可能會約束這個新語言的發展。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

當然也有網友並不看好Carbon,認為谷歌有棄用創新軟體的習慣,這個聽起來很炸的專案可能會半途而廢。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

還有人提出:Carbon這個用C++實現的語言居然想要替代C++?

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

有網友覺得,現在Rust正在逐步成為低階程式語言,Carbon和Rust有不少相似之處,僅憑“讓C++遷移更容易”並沒有什麼賣點。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

此外,Hacker News上還有網友想到了D語言

(DLang)

,這個語言和C++的互通性很不錯。而且D語言也有Carbon的不少功能,包括和C++相互呼叫、減少額外的開銷等。

可惜由於D語言的初期定位不夠清晰,一度試圖涵蓋Java和C++的功能,導致它比較小眾。

“C++繼任者”火到GitHub趨勢榜一,C++之父:規範不足,無法評價

對這個號稱“C++繼承者”的Carbon,你怎麼看?歡迎在評論區留言~

傳送門:

https://github。com/carbon-language/carbon-lang

參考連結:

[1]https://devclass。com/2022/07/25/c-inventor-stroustrup-says-googles-carbon-too-new-and-under-specified-for-meaningful-technical-comment/

[2]https://www。youtube。com/watch?v=omrY53kbVoA

[3]https://news。ycombinator。com/item?id=32151609

[4] https://www。reddit。com/r/programming/comments/w2thvo/carbon_an_experimental_c_successor_language/

— 完 —

量子位 QbitAI · 頭條號簽約