編者按:本文是全球 C++ 及系統軟件技術大會聯合主席李建忠老師為C++之父最新出版的《現代C++白皮書》中文版撰寫的序言。本書公益發行,可關注文末免費領取。
C++ 作為一門博大精深的語言,其發展演化歷程也堪稱波瀾壯闊。由于教育的原因,很多人對 C++ 還停留在 C++98 之前的版本。殊不知 C++ 在經歷從 2006 年之后至今的 15 年“激流勇進式的發展”,在很多人眼里已經近乎變為一個全新的語言。這 15 年間,國際 C++ 標準委員會發布的 4 個版本:C++11/14/17/20 也被統稱為“現代 C++”。因為這一時期對 C++ 發展的里程碑作用,我將其稱為“現代 C++ 的文藝復興”。
本書來自于 C++ 之父 Bjarne Stroustrup 為 ACM 國際計算機協會的編程語言歷史分會(HOPL)2021 年會撰寫的論文。我是在 2020 年全球 C++ 及系統軟件技術大會 (Cpp-Summit)前和 Bjarne 溝通大會主題演講時,聽他幾次提及本文,捧讀后遂一發不可收拾。我當時即判斷這個長篇論文顯然將是現代 C++ 發展歷史上無可替代的、最重要的文獻。鑒于其重要性,我迫不及待地想將其引入中國 C++ 社區, 我將這一愿望表達給了 Bjarne。Bjarne 非常慷慨、也非常欣喜地授權我來組織本書的中文翻譯工作,并由全球 C++ 及系統軟件技術大會以公益的方式在中國 C++ 社區中發行。
本書對現代 C++ 從 2006 年到 2020 年間的發展做了百科全書式的回顧。它并不是典型意義上的教科書,雖然它鞭辟入里地解釋了現代 C++ 語言幾乎所有的重要特性和功能。更難能可貴的是 Bjarne 花了很多筆墨來交代很多重要特性和功能的來龍去脈,它們的緣起、演化過程中的各種提案、最后的決策考量等——這些看后都讓人大呼過癮,有“知其然、知其所以然”之痛快。
在所有編程語言里,C++ 最為獨特、同時也爭議極大。一方面,作為一門強大而古老的編程語言,C++ 是當今人類信息基礎設施的主要構建者,從航空航天到生物信息,從電信設施到微電子,從互聯網基礎設施到人工智能,從汽車地鐵到萬物互聯,很難想象離開 C++ 編寫的軟件這些領域會怎樣?在全球 IT 科技巨頭中, Google、微軟、騰訊等,C++ 也都是當之無愧的首要編程語言。但另一方面,每過一段時間都會有新語言出來號稱挑戰 C++,引發部分人擔心 C++ 的地位會不會被新語言所威脅?特別在對現代 C++ 發展不了解的人眼里,甚至由此產生對 C++ 莫名的危機感。這個問題也經常在 C++ 技術大會上被問起。
Bjarne 對這個問題在書中有著很清晰的回答:C++ 在其近 40 年的發展中取得成功的根本原因是,它填補了編程領域一個重要的“生態位”:需要有效使用硬件和管理高復雜性的應用程序。C++ 的核心精神“直接映射硬件”和“零開銷抽象”正是對這一“生態位”恰如其分的支撐。換言之,如果不那么在乎性能開銷,那么 C++ 并不是最好的語言選擇(Java、Go、Python 等正是填補了這些領域);或者軟件規模不大、無需很多抽象手段來管理軟件的復雜度,那么 C 語言就足夠。但如果性能是軟件的關鍵指標,同時又有越來越大的復雜度,那么 C++ 幾乎是獨一無二的選擇。我們看到 C++ 這些年來的發展,都是緊扣 40 年前 Bjarne 為 C++ 設定的“生態位”與“核心精神”而開展的。只有深刻理解這一點,才能從根本上抓住 C++ 的發展脈絡。
全書展示了 Bjarne 帶領 C++ 標準委員會對現代 C++ 發展冷靜、睿智、而又執著的判斷和決策。比如在面向對象大行其道的年代,Bjarne 就冷靜地指出“一切皆對象”是一種錯誤的偏執。面向對象不是 C++ 的所有,而僅僅是其支持的多種編程范式(面向過程、面向對象、泛型編程、函數式編程)中的一種。在很多場合,其他的編程范式要比面向對象更合適。再比如 Bjarne 早在 1994 年就提出需要為泛型編程提供規范化接口這一重要設施:即后來被稱為概念(concept)的語言機制。但因為各種原因,概念自 2003 年提出后,遇到各種曲折的協商、爭論、實現障礙等諸多羈絆,最終在 Bjarne 嘔心瀝血的推動下,才正式納入 C++20 的正式標準。
本書另外一個難能可貴的地方是 Bjarne 對于 C++ 語言發展過程中一些缺失之處也有非常深刻的反思。比如對于標準委員會過于關注語言和庫的設計,而忽略“動態鏈接、構建系統和靜態分析等工具設施”,Bjarne 也直言是一大錯誤。再比如,對于很多專家的各種奇思妙想,Bjarne 甚至在 2018 年寫了一篇文章《記住瓦薩號!》來提醒標準委員會,追求大而全的新奇功能,而忽略穩定性對 C++ 是非常危險的,后來為此領導標準委員會“方向組”提出《C++ 程序員的“權利法案”》。Bjarne 還談到 2006 年是 C++ 發展的最低谷,那時候本來打算推出的 C++0x 標準由于委員會的決策機制和實現問題而變得遙遙無期。另一方面單核處理器的性能停止提高(Herb Sutter 有著名的文章:“The Free Lunch Is Over”),這種環境對C++ 語言的期待其實很高,但 C++ 那時候的發展緩慢,將很多本來是 C++ 的機會拱手讓位給了很多其他商業語言。
很多人對于主導 C++ 語言的幕后力量其實不甚了解,Bjarne 在本書中也花費筆墨解釋了國際 C++ 標準委員會的機制。這方面,我和 Bjarne 本人也有過幾次交流。如果盤點很多編程語言背后的主導力量,大致分以下幾類:第一類是公司主導的語言,例如 Go、Swift、C# 等。Bjarne 曾經談過在 C++ 發展的歷史上,有好幾家巨頭希望說服他加入并將 C++ 納入公司范疇,但 Bjarne 都清醒地婉拒了。我問為什么?Bjarne 談到這類語言由于有商業力量把持,有大筆資金投入,所以在一段時間發展看起來非常快,配套支持也非常好。但由于被公司把持,只能為公司的平臺戰略服務,一旦公司平臺戰略轉向,那么這類語言也會快速衰落。回望編程語言的發展歷史,不得不佩服 Bjarne 在這個問題上的睿智和長遠眼光。第二類是個人英雄主義+社區主導的語言,比如 Python、PHP 等,這類語言在社區上有非常旺盛的生命力,但 Bjarne 對這種野蠻生長的方式也有著天然的警覺,從長遠來看,他擔心這種“一盤散沙”的方式會讓一個語言錯失方向和一些重大功能。Bjarne 早在 1989 年就為 C++ 語言選擇了第三種方式,即“基于共識建立的國際標準委員會”,這種機制使得要將一個特性納入標準,首先要說服絕大多數的人同意。“共識流程”固然使得 C++ 標委會的決策速度緩慢,但它帶來的是 C++ 語言惠及所有人的、長期的繁榮和穩定。我個人認為,這種決策機制,也是使得 C++ 在所有編程語言中顯得非常獨特的一個幕后原因。
最后我要特別談談本書的作者,廣受尊敬的 C++ 之父 Bjarne Stroustrup。我和Bjarne 相識于 2005 年,那是我們第一次邀請他來上海舉辦首屆 C++ 技術大會并發表主旨演講。在相識相交的 16 年間,Bjarne 對待技術問題時的睿智和犀利、與人相處時的平易近人,都給我留下極其深刻的印象。如果對比其他編程語言的發明者,你會發現 Bjarne 也是一個獨特的存在。

2005年舉辦第一屆C++技術大會 我與Bjarne Stroustrup的合影
1979 年,在貝爾實驗室發明 C++ 時, Bjarne 當時年僅 29 歲,正可謂風華正茂。后來當各路編程語言天才被各大公司重金招至麾下,Bjarne 選擇放棄各種公司誘惑,力排眾議將 C++ 納入 ISO 國際標準,成立標準委員會,為 C++ 的百年發展大計殫精竭慮。在 C++ 語言發展的每一個關鍵節點,從 C++98、C++11、C++14、C++17,一直到今天的 C++20,Bjarne 既親力親為、勇于開拓,也廣開言路、從諫如流,在一些重大問題上發揮他無與倫比的影響力和智慧。Bjarne 本人對 C++ 在中國的發展也非常熱心,接受我的邀請長期擔任全球 C++ 及系統軟件技術大會的聯合主席,不辭辛勞地為中國 C++ 社區播撒他的智慧,關心現代 C++ 在中國的教育,其情殷殷,其心切切。他對本書中文版的發布也非常關心。
本書中文版的發布也要感謝由吳詠煒、楊文波、張云潮等組成的翻譯團隊(譯序中一一列出了他們的名字),他們都是來自中國 C++ 社區的熱心貢獻者。當然,最要感謝的還是作者本人Bjarne Stroustrup,他不僅是C++的發明者,也是現代C++ 文藝復興的締造者。希望本書的智慧能夠引領我們一起前進!
李建忠
全球 C++ 及系統軟件技術大會聯合主席
2021 年 10 月 于上海浦東
免費領取白皮書
點擊原文鏈接,或掃描海報二維碼登記,免費領取《現代C++白皮書》。