Google終于開始革C++的命了!
微軟通過TypeScript 革了JavaScript的命。
蘋果用Swift革了Objective-C的命。
JetBrains 用Kotlin 革了Java的命。
現(xiàn)在,Google終于要拿C++開刀了。
這個黑色圓圈中的C可不是C語言,而是叫做:
Carbon
為啥Google要搞一個Carbon呢?C++不是Google的五大語言之一嗎?
C++,Java,Python,JavaScript,Go
長期以來,C++是構(gòu)建性能關(guān)鍵型應(yīng)用程序員的主要語言,也積累了大量的項目和類庫。
但是C++本身非常復(fù)雜,數(shù)十年下來,這些項目和類庫慢慢變成了技術(shù)債務(wù)。
C++雖然也在努力發(fā)展,但是受到了官僚委員會流程的阻礙,這個流程以標(biāo)準(zhǔn)化而不是設(shè)計為導(dǎo)向,添加新功能很困難,一個特別委員會可能需要數(shù)年的瀑布流程才能做出重要決定。
可以想象,當(dāng)Google的人面對著海量C++代碼的系統(tǒng),想改進C++又很難的時候,那種無奈的心情。
既然如此,那就重啟爐灶,用碳(Carbon)去燃燒C++吧!
為什么不直接用Rust?
可能很多人有這個疑問,Rust也面向系統(tǒng)級編程,并且被Mozilla設(shè)計成內(nèi)存安全的語言,用來替代C語言。
Google認(rèn)為,對于新項目來說,用Rust很合適,但是問題在于:
它不像 Java 和 Kotlin 那樣具有“雙向互操作性”,C++的生態(tài)遷移到Rust是很困難的。
而Carbon的目標(biāo)是C++的后繼,是圍繞與C++的互操作性以及遷移現(xiàn)有C++代碼庫而設(shè)計的。
不得不說,生態(tài)的威力再一次展現(xiàn),當(dāng)你想讓別人搬家的時候,最好能把他手頭的財產(chǎn)一并都搬走,否則每個人都會戀戀不舍。
Carbon的設(shè)計目標(biāo)是這樣的:
- 性能要和C++相媲美,要不然就沒有吸引力了
- 和C++無縫的,雙向的互操作
- 代碼應(yīng)該容易編寫、閱讀
- 有著實用的安全和測試機制
- 要有一個溫和的學(xué)習(xí)曲線,別把人都嚇跑了
- 支持現(xiàn)有的軟件設(shè)計和架構(gòu)
開發(fā)團隊還將著手創(chuàng)建一個內(nèi)置的包管理器,這幾乎是每個語言必備的工具了。
這樣,Carbon就可以像TypeScript和Kotlin那樣,基于現(xiàn)有C++的生態(tài)系統(tǒng),吸引開發(fā)人員,保護現(xiàn)有投資。
看下Carbon的代碼吧:
import Console;
// Prints the Fibonacci numbers less than `limit`.
fn Fibonacci(limit: i64) {
var (a: i64, b: i64) = (0, 1);
while (a < limit) {
Console.Print(a, " ");
let next: i64 = a + b;
a = b;
b = next;
}
Console.Print("\n");
}
用fn來定義函數(shù),用var 來聲明變量,變量類型后置,有Go語言的影子。
用大括號定義函數(shù)體和代碼塊,用分號來分割語句,while 關(guān)鍵字, 有C語言的感覺。
Console.Print(...),有點C#的味道。
總之,雖然號稱是C++的后繼,但一點兒也不像C++。
語言特性
我瀏覽了一下,感興趣的特性有這些:
指針
指針號稱是C語言和C++的精華,可以直接操作內(nèi)存,強大又靈活。
不過指針也是萬惡之源,把指針指向不該指向的地方,程序馬上崩潰。
Carbon中也有指針:T* p , 但是為了安全,并不支持指針的算術(shù)運算如 p++
Carbon中沒有空指針,要指向一個無效的對象,需要使用Optional(T*)
既然有指針,還要和C++互操作,那垃圾收集之類的技術(shù)肯定是沒法用了,自己小心地管理內(nèi)存吧。
只提供一種方法來做事情
對于一件事情,Perl語言提供了很多方式來做,在非常靈活的同時也讓代碼維護者非常困擾。
C++也是這樣,例如可以用 "&&" 或者 "and"來表示邏輯運算,可以用struct 和class 來封裝數(shù)據(jù)??梢杂?xaa和0xAA表示十六進制。
為了提高代碼的可讀性和可維護性,促進團隊協(xié)作,Carbon決定向Python學(xué)習(xí):應(yīng)該只有一種最好的,最明顯的方式來做事情。
安全
Carbon 對軟件的考量是這樣的:
內(nèi)存安全:不允許越界訪問,取消null指針,取消未初始化的指針,禁止訪問已經(jīng)釋放的地址
類型安全:不允許用不正確的類型來訪問有效的內(nèi)存
數(shù)據(jù)競爭安全:防止多個線程在沒有“同步”的情況下對內(nèi)存地址進行讀寫
其他的特性例如泛型、類.....我這里就不一一贅述了,感興趣的可以到GitHub上去看看:https://github.com/carbon-language/carbon-lang
開發(fā)方式
Carbon 是Google內(nèi)部發(fā)起的,但是Carbon團隊認(rèn)為為了未來取得成功,未來需要獨立的、開放的社區(qū)來主導(dǎo)。
不能像C++委員會那樣,雖然保證了國家和公司的代表性,但是限制太多,成本高昂,不出席會議就沒有發(fā)言權(quán),只有現(xiàn)場人員的投票才能決定。
這和現(xiàn)在的主流開源方式大相徑庭,所以Carbon不走“ISO流程”,要擁抱開源,將來由軟件基金會和志愿者領(lǐng)導(dǎo)。
一點兒想法
看著Google以及其他國外大廠孜孜不倦地折騰新語言,新系統(tǒng),不由得聯(lián)想到國內(nèi)的大廠,能不能也學(xué)學(xué)人家,投入資源,做一點兒底層的東西,對IT界做點兒貢獻(xiàn)了?別老是在應(yīng)用層琢磨商業(yè)模式了。
我相信,經(jīng)過20多年的發(fā)展,國內(nèi)絕對有人有能力做類似事情,就看有沒有環(huán)境去做了。
對了,順便說一句,我們公司在招聘Carbon程序員,年薪大概是12萬美元~16萬美元,歡迎投簡歷!
要求:有10年Carbon開發(fā)經(jīng)驗。