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