74歲C++之父最新藍圖:讓程式碼更安全,還能相容40年前的老程式!

作者 | David Cassel
譯者 | 平川
策劃 | Tina
本文最初發佈於 THENEWSTACK 部落格。
圖片來源:維基百科
C++ 仍在不斷發展,但許多開發者的使用方式似乎還停留在上個世紀。Bjarne Stroustrup 表示:“我希望整個社群,尤其是 WG21 的成員,能瞭解我對 C++ 未來發展的看法。”
這位 74 歲的 C++ 建立者用 40 年的時間見證了他在 1985 年設計的這門語言的成長。
為了推動一些渴望已久的特性,上個月,Stroustrup 在《ACM 通訊》上發表了“21 世紀的 C++”一文https://cacm.acm.org/blogcacm/21st-century-c/。這篇長達 6300 字的文章旨在展示現代化的、型別安全的 “21 世紀 C++ ”中的一些“關鍵概念”,以便可以建立 “C++ on steroids”。例如,在文中,Stroustrup 著重介紹了長期以來一直在嘗試的方法,如使用 guideline-enforcing 配置檔案編寫更安全的程式碼。為了與幾十年來已經編寫的 C++ 程式碼保持相容,“我們不能改變語言,但我們可以改變它的使用方式……”,Stroustrup 寫道。
然而,這種演變並不完全取決於他自己。在文章末尾,Stroustrup 提到了 WG21(標準化工作組),以及它將如何不可避免地對語言的變化產生影響。Stroustrup 寫道,”我不願意對未來做出預測,部分原因是這本身就很冒險,更重要的是因為 C++ 的定義是由一個龐大的 ISO 標準委員會基於共識來管理的。“
“我上次看時,會員名單上有 527 條。這表明大家有著很高的熱情和廣泛的興趣,並且提供了廣泛的專業知識,但對於程式語言設計來說,這並不理想,而且 ISO 的規則也無法進行大幅修改"。
儘管如此,對於關鍵受眾,Stroustrup 告訴 TNS,“有些人缺乏歷史感,忽略了一些關鍵點。例如,指南和配置檔案要符合 C++ 的長期發展方向。“因此,他正在採取措施教導他們。”為此,我必須說明關鍵特性的適用範圍”。
他這篇內容詳盡的文章是一個很好的開始,但也只是眾多措施中的一種。最終,它將改變整個 C++ 生態系統的發展軌跡,同時為程式設計師帶來他們渴望已久的高效能、型別安全和靈活的語言。
在完成這一切的同時,Stroustrup 也實現了自己從上世紀 80 年代起就一直堅持的目標……
呼籲採取緊急行動
Stroustrup 還直接與 WG21 進行了溝通。The Register 指出,“過去三四年來,業界和政府的網路安全專家一直在勸阻人們使用 C 和 C++,同時鼓勵人們使用具有更好記憶體安全性的語言”。因此,在發表這篇文章三天後,Stroustrup 給 C++ 標準委員會留下了一份官方說明,他將其描述為 “呼籲採取緊急行動,部分是為了應對 C++ 所受到的前所未有的嚴重攻擊”。
“我認為, WG21 需要做一些有意義的事,並讓人們看到它在做這件事。Profiles 是一個可以實現這一目標的框架。“
Stroustrup 的觀點很明確。他在文章中寫道:“指南沒問題,也有用處,但在一個龐大的程式碼庫中,要始終如一地遵循它們基本上是不可能的。我們需要的是一種執行機制,它能標記並防止諸如懸空指標、範圍錯誤和 nullptr 解引用等問題。”
幸運的是,這樣的執行機制已經以執行準則配置檔案的形式提供了。參考資料部分提供了在 Visual Studio 2019 中使用這些配置檔案的示例。它實現了 “Lifetime” 配置檔案的早期版本,可檢查 C++ 物件生命週期中的懸空指標和引用以及其他常見錯誤…
一般來說,每個配置檔案通常都是在編譯時驗證要求是否得到滿足,是否實現了特定的效果。除了 “Lifetime” 檢查配置檔案,他們還計劃推出更多配置檔案,包括 “Bounds” 配置檔案,以便確保所有訪問陣列的程式碼都包含範圍安全檢查。
在我們的電子郵件採訪中,Stroustrup 指出,透過 2020 年推出的新 span 類模板,C++ 已經為防止範圍錯誤提供了更好的支援。Bounds Profile 只是為了確保這些用於保證邊界安全的功能確實已經執行到位。
Stroustrup 告訴我:“其中很多都是標準的,現在就可以使用“。此外,他們還計劃推出其他幾個配置檔案,從而幫助開發人員避免程式碼中的型別或算術錯誤。Stroustrup 認為:”在不久的將來,Profiles 將為各種約束的執行提供一個框架。“
希望這能為 C++ 提供人們所期待的安全保證。不過,這也是 40 年前 Stroustrup 最初的 C++ 構想的一個自然發展過程。
“更好的近似”
像型別安全等特性一直是 Stroustrup 為 C++ 設定的安全和效能目標之一。
他在文章中寫道:“這一點從一開始就沒有變過”,並在參考資料中向讀者介紹了他 1994 年出版的《C++ 語言的設計與演化》一書。但是,當代 C++ 比早期版本更好地實現了這些長期目標,其中一部分原因是這種語言“從設計之初就在不斷發展”,Stroustrup 在文章末尾寫道。因此,經過幾十年的改進,他將 C++ 23(10 月份釋出的版本)這樣的 “當代 C++”稱為他最初理想的 “更好的近似”。
在敦促 WG21 採用 Profiles 的說明中,他也強調了這一點:“正如我之前所說,這也是一個機會,因為型別安全和資源安全(包括記憶體安全)從一開始就是 C++ 的關鍵目標"。
“對於這一點,我的感受很強烈。請不要被我相對平靜的語言所迷惑"。
Stroustrup 在文中指出,語言不斷發展的一個問題是“許多人對 C++ 的理解已經過時。如今,我們仍然可以看到人們不斷地提及神話語言 C/C++,這通常意味著,人們認為 C++ 是 C 語言的一個次要擴充套件,包含了 C 語言所有最糟糕的方面,以及對 C++ 複雜特性的怪異濫用……” 但是,C++ 仍在繼續發展,Stroustrup 強調說,C++  “正在進行中的工作”及實驗性功能已經可以改進非同步計算通用模型和 SIMD。
Stroustrup 寫道:“一個嚴重的問題是,如何將不同的想法整合成一個連貫的整體。與大多數軟體專案——甚至是學術界的大多數計算機科學工作——不同,設計一種語言需要“在一個並非所有相關因素都能為人所知的空間裡做決定,而且接受以後數十年內都不會有重大改變”。
簡而言之,這是一個棘手的問題——這仍然是一個已知的問題。“幾十年來,幾乎所有的語言設計工作都以失敗告終,這說明了這個問題的嚴重性“。
但這並不意味著 C++ 要不再嘗試進化……
顯著改進
Profiles 並不是 21 世紀 C++ 採用的唯一改進方式。Stroustrup 在接受我們的電子郵件採訪時說:“我還要指出,模組是一種能使程式碼更簡潔並大大縮短編譯時間的機制。”
Stroustrup 在文章中提到,匯入已編譯模組比使用老式的 #include 語句速度“高出 7 到 10 倍”。
他告訴我:“現在,大多數人都可以使用 C++23 提供的功能大幅改進他們的程式碼。“展望未來,Stroustrup 預測,未來會有更多提升效能的特性。“在 C++26 中,我們很可能會看到經過改進的併發支援、靜態反射和契約,以及許多細微的改進和標準庫元件。”
這種前瞻性的希望或許可以解釋,為什麼 Stroustrup 在宣傳 Profiles 時會以 C++ 的歷史為基礎。Stroustrup 告訴我,他的文章“展示了 C++ 演進的方向。安全保證即將到來。這在 C++ 中並不是一個新奇的想法,而是長期目標的一部分。完備的型別安全和資源安全是 C++ 最初的目標之一,但推動大量應用領域的發展需要時間,而且必須循序漸進。”
他知道,已安裝的程式碼庫非常廣泛,C++“目前涵蓋了大量的應用領域”。安全保證必將涉及那些已經使用 C++ 提供高質量應用程式的領域。
“關注記憶體安全的人應該注意到,C++ 並非 C 語言。在 C++ 中,基於更安全的程式設計風格和加固庫的解決方案已經廣泛部署。“
我問,是否有跡象表明他在 ACM 發表的文章產生了影響——顯然這很難量化。Stroustrup 說:"我不願意對未來做預測,但我們已經看到,泛型程式設計已經從 concepts 中獲得了更好的支援。”
Stroustrup 指出,如果你正在尋求有效的改進,那麼你也可以將目光投向語言之外。目前,有很多工具可供 C++ 開發人員選擇。
“語言不僅僅是語言規範或正式標準中的內容“。
原文連結:
https://thenewstack.io/bjarne-stroustrup-on-how-he-sees-c-evolving/
宣告:本文為 InfoQ 翻譯整理,不代表平臺觀點,未經許可禁止轉載。
今日好文推薦
谷歌史上最大收購:320 億美元買下了發現 DeepSeek 資料庫洩露的那家小企業
當大模型接管程式設計:NASA 瘋狂的“反人類”程式設計要求,為何仍被奉為行業聖典?
英偉達軟硬體“雙拳出擊”:Blackwell Ultra、Rubin 晶片炸場,開源Dynamo讓R1 token生成暴漲40倍
用“千行程式碼”作弊軟體騙過大廠!00後拿4個頂級Offer後瀟灑拒掉:技術面試早該淘汰了?
 會議推薦
在 AI 大模型重塑軟體開發的時代,我們如何把握變革?如何突破技術邊界?4 月 10-12 日,QCon 全球軟體開發大會· 北京站 邀你共赴 3 天沉浸式學習之約,跳出「技術繭房」,探索前沿科技的無限可能。
本次大會將匯聚頂尖技術專家、創新實踐者,共同探討多行業 AI 落地應用,分享一手實踐經驗,深度參與 DeepSeek 主題圓桌,洞見未來趨勢。

相關文章