“C++繼任者”火到GitHub趨勢(shì)榜一,C++之父:規(guī)范不足,無法評(píng)價(jià)
谷歌稱其為了“探索用C++做不到的事”
Alex 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI
今年的CPP North C++大會(huì)上,谷歌宣布了一門新的編程語言Carbon,并稱其將是“C++的繼任者”。
谷歌將其在GitHub上開源。雖然這個(gè)語言目前還處于實(shí)驗(yàn)階段,但還是很快吸了引眾多程序員前來圍觀,還一度登上了GitHub趨勢(shì)榜第一,現(xiàn)已收獲標(biāo)星21.3k。
對(duì)于谷歌方開發(fā)者稱Carbon是C++的繼承者一事,有國外媒體詢問了C++之父Bjarne Stroustrup的看法,老爺子表示:
這些年總是有新的語言試圖成為C++的繼承者,我歡迎對(duì)編程語言和編程風(fēng)格進(jìn)行實(shí)驗(yàn);
但Carbon太新且規(guī)范不足,我無法真正做出有意義的技術(shù)評(píng)論。而通常在不開發(fā)全新語言規(guī)則、庫和管理方案的情況下,很難提供C++的替代方案。
所以谷歌團(tuán)隊(duì)為什么非要搞一個(gè)C++“替代版”而不是繼續(xù)完善現(xiàn)有的C++?畢竟他們自己內(nèi)部都在廣泛使用這個(gè)語言。
為什么不去升級(jí)C++?
對(duì)此,帶領(lǐng)團(tuán)隊(duì)開發(fā)Carbon的谷歌工程師錢德勒·卡魯斯(Chandler Carruth)解釋稱,C++至今已有40歲了,其自身的很多問題困擾著現(xiàn)在的開發(fā)人員。
數(shù)十年來,C++已積累了許多技術(shù)負(fù)債。其維護(hù)者優(yōu)先考慮向后兼容,以便繼續(xù)支持廣泛使用的項(xiàng)目,但這樣容易導(dǎo)致代碼量巨大。
而且C++雖然有開源的編譯器(如gcc),但也有不少閉源編譯器,其中的某些功能可能要過很久才能改善升級(jí)。
此外,C++語言的發(fā)展也受到了官僚委員會(huì)管理程序的阻礙,該程序以標(biāo)準(zhǔn)化而非設(shè)計(jì)為導(dǎo)向,這種做法導(dǎo)致很難給其添加新功能。
解決這些問題的最佳方法是避免直接繼承C或C++的“遺產(chǎn)”,而是從語言基礎(chǔ)開始,例如:現(xiàn)代泛型系統(tǒng)、模塊化代碼組織、一致的簡單語法等。
卡魯斯也在CPP大會(huì)上提到,該語言并不是為了和C++未來改進(jìn)版本競爭,而是——
“探索用C++做不到的事”
正如微軟創(chuàng)建TypeScript來更新JavaScript那樣,Carbon作為一種在C++基礎(chǔ)上開發(fā)的新語言,將為更多開發(fā)者解決內(nèi)存安全和泛型等問題,來彌補(bǔ)C++的不足。
目前Carbon語言的亮點(diǎn)包括:
- Introducer關(guān)鍵字和簡單語法;
- 函數(shù)輸入?yún)?shù)為只讀值;
- 指針提供間接訪問和變體;
- 使用表達(dá)式命名類型;
- 通過包名導(dǎo)入APIs;
- 強(qiáng)大且經(jīng)過定義檢查的泛型
- ……
此外,谷歌正在繼續(xù)開發(fā)Carbon以支持以下功能:
- 性能關(guān)鍵型軟件;
- 軟件和語言的演變;
- 易于閱讀、理解和編寫的代碼;
- 實(shí)用的安全和測(cè)試機(jī)制;
- 快速且可擴(kuò)展的開發(fā);
- 現(xiàn)代操作系統(tǒng)平臺(tái)、硬件架構(gòu)和環(huán)境;
- 與現(xiàn)有C++代碼的互操作性和遷移性。
開發(fā)團(tuán)隊(duì)還將創(chuàng)建一個(gè)內(nèi)置包管理器,這是C++中非常缺乏的。
舉個(gè)簡單的例子:用C++代碼和Carbon代碼分別計(jì)算半徑為1和2的兩個(gè)圓面積之和。二者對(duì)比如圖:
△圖源:GitHub;左為C++代碼,右為Carbon代碼
下圖展示了Carbon和C++互通性。程序員可以在Carbon上調(diào)用C++庫、方法和函數(shù),而不需要額外的開銷,反之亦然。
不過至于安全問題,Carbon并沒有一開始就建立內(nèi)存安全系統(tǒng)。
卡魯斯介紹說,由于C++內(nèi)存安全性很差,所以Carbon的研發(fā)起點(diǎn)很低,該項(xiàng)目優(yōu)先考慮的是遷移而不是安全;希望以后Carbon至少可以和Go或Swift一樣安全。
事實(shí)上,在Carbon之前,Mozilla(就是開發(fā)火狐那個(gè))于2015年就發(fā)布了一個(gè)也標(biāo)榜自己為“C++繼承者”的語言:Rust,而且這個(gè)Rust很注重內(nèi)存安全性。
那為什么不大力發(fā)展Rust呢?
“Carbon是為有大量C++庫者準(zhǔn)備的”
卡魯斯在CPP會(huì)議上對(duì)此回應(yīng)稱,C++和Rust之間的銜接性不好,要將C++的生態(tài)系統(tǒng)轉(zhuǎn)移到Rust非常困難。
對(duì)于那些已經(jīng)擁有大量C++代碼庫的開發(fā)者來說,要把自己之前的東西搬到Rust編輯器上就很麻煩了。
而Carbon被設(shè)計(jì)成一種C++的后繼語言,它以后將實(shí)現(xiàn)和C++無縫連接,并具備與C++的雙向互操作性,這對(duì)于有大量C++代碼庫者非常友好。
對(duì)于那些沒有這種“煩惱”的程序員們,卡魯斯表示,想用Rust的話就繼續(xù)用好了。
網(wǎng)友紛紛圍觀
前來圍觀Carbon的一眾網(wǎng)友中,有人表示支持谷歌開發(fā)這個(gè)新語言:
若能在這里直接調(diào)用C語言庫的低層級(jí)Stuff函數(shù),而不需在開頭加行extern “C”,是很了不起的。
有人認(rèn)同其簡化語言和提升安全性的目標(biāo),但他覺得要在現(xiàn)有的語言中改進(jìn)內(nèi)存安全并不太容易,現(xiàn)有的C++特征和API很可能會(huì)約束這個(gè)新語言的發(fā)展。
當(dāng)然也有網(wǎng)友并不看好Carbon,認(rèn)為谷歌有棄用創(chuàng)新軟件的習(xí)慣,這個(gè)聽起來很炸的項(xiàng)目可能會(huì)半途而廢。
還有人提出:Carbon這個(gè)用C++實(shí)現(xiàn)的語言居然想要替代C++?
有網(wǎng)友覺得,現(xiàn)在Rust正在逐步成為低級(jí)程序語言,Carbon和Rust有不少相似之處,僅憑“讓C++遷移更容易”并沒有什么賣點(diǎn)。
此外,Hacker News上還有網(wǎng)友想到了D語言(DLang),這個(gè)語言和C++的互通性很不錯(cuò)。而且D語言也有Carbon的不少功能,包括和C++相互調(diào)用、減少額外的開銷等。
可惜由于D語言的初期定位不夠清晰,一度試圖涵蓋Java和C++的功能,導(dǎo)致它比較小眾。
對(duì)這個(gè)號(hào)稱“C++繼承者”的Carbon,你怎么看?歡迎在評(píng)論區(qū)留言~
傳送門:
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/