BjarneStroustrup談他如何看待C++的發展

導讀:C++ 的作者 Bjarne Stroustrup 近日主張採用強制執行指南的配置檔案,以此來增強該語言的安全性。
Bjarne Stroustrup 近日宣告:“我希望向整個C++社群,尤其是 WG21 的成員傳達我對 C++ 未來發展方向的觀點和看法。”
這位 74 歲的 C++ 創始人花了整整 40 多年的時間,建立了C++語言,如今仍然在關注著他於 1985 年設計的這種程式語言的發展。
為了鼓勵一些開發者長久期望的功能,Stroustrup上個月在《ACM 通訊》上發表了一篇 6300 字的文章《21 世紀的 C++》,他承諾展示現代、型別安全的“21 世紀 C++”的“關鍵概念”,以建立“強化版 C++”。
比如,在文章中,Stroustrup 強調了長期實驗的方法,例如使用指南強制配置檔案編寫更安全的程式碼。為了保持與數十年來已經編寫的 C++ 程式碼的相容性,“我們無法改變語言,”Stroustrup 寫道。“但我們可以改變它的使用方式……”
然而,這種演變並不完全取決於他自己一個人。在接近尾聲的一節中 ,Stroustrup 承認了標準化工作組 WG21,以及它將不可避免地在語言變化的程度上發揮的作用。
“我並不願意對未來做出預測,”Stroustrup 寫道,“部分原因是這本身就很危險,特別是因為 C++ 的定義由一個龐大的 ISO 標準委員會控制,該委員會以共識為基礎。”
“我上次檢視時,會員名單上有 527 人。這表明了熱情、廣泛的興趣,並提供了廣泛的專業知識,但這對於程式語言設計來說並不理想,而且 ISO 規則不能進行重大修改。”
然而,當談到那些關鍵的受眾時,“有些人不瞭解歷史,因此錯過了關鍵點,”Stroustrup 這樣說,“例如指南和配置檔案是否符合 C++ 的長期發展方向。”所以他正在採取措施培訓他們,“要做到這一點,我必須展示關鍵特性適合什麼地方。”
他這篇詳盡的文章確是一個很好的開始——但它也只是多管齊下努力的一部分。最終,它可能會改變整個 C++ 生態系統的發展軌跡,同時也為程式設計師帶來他們一直渴望的高效能、型別安全且靈活的語言。
而這一切,也正是在實現 Stroustrup 自 20 世紀 80 年代以來一直堅持的目標的同時……

呼籲緊急行動

Stroustrup 也直接與 WG21 進行了溝通。

有多家技術媒體和社群引用政府的建議,這樣宣傳,“過去三四年來,行業和政府網路安全專家一直在勸阻使用 C 和 C++,同時宣傳記憶體安全性更高的語言。”

有鑑於此,Stroustrup 向 C++ 標準委員會官方發出了一封信函,他將其描述為“呼籲採取緊急行動,部分是為了應對針對 C++ 前所未有的嚴重攻擊。”

“我認為 WG21 需要做一些有意義的事情,並讓人們看到他們已經這樣做了。比如Profiles 就是一個可以做到這些能力的框架。”

Stroustrup 的願景非常明確。他在文章中這樣寫道:“指導方針很好也很有用,但在大型程式碼庫中始終如一地遵循它們基本上是不可能的。”我們需要的是某種強制機制,可以真正標記和防止空指標、範圍錯誤和 nullptr 取消引用等問題。

幸運的是,這種強制機制已經以這些指南配置檔案的形式提供。腳註提供了它們在 Visual Studio 2019 中的使用示例,該配置檔案實現了“Lifetime”配置檔案的早期版本,該配置檔案檢查 C++ 是否存在懸空指標和引用以及物件生命週期中的其他常見錯誤……
基本上,每個配置檔案都會驗證是否滿足了實現特定結果的要求,通常是在編譯時。除了“生命週期”檢查配置檔案外,還有更多計劃,包括“邊界”配置檔案,可確保所有訪問陣列的程式碼都包含範圍檢查安全檢查。
Stroustrup 指出,C++ 已經透過其 2020 年推出的新span類模板支援更好地防止範圍錯誤 。Bounds Profile 只是確認那些確保邊界安全的功能到位。
Stroustrup 告訴開發者們說:“其中大部分都是標準的,現在就可以開箱使用。”他們還計劃推出其他幾個配置檔案,以幫助程式碼避免型別或運算錯誤。Stroustrup 還確信的說,“在不久的將來,配置檔案將提供一個框架來執行各種約束。”
希望這些可以為 C++ 提供人們所期待的安全保障,這也是 Stroustrup 40 年前對 C++ 最初的設想的自然發展。

“更準確的估計”

型別安全等特性一直是 Stroustrup針對 C++的安全性和效能目標之一。

“這一點自最初的日子以來就沒有改變過,”他在文章中寫道,並在腳註中引用了他 1994 年出版的《C++ 的設計和演化》一書的內容。

但當代 C++ 可以比早期版本的 C++ 更好地實現這些長期目標,部分原因是該語言“目標在演化”,Stroustrup 在文章結尾寫道。因此,經過數十年的改進,他稱“當代 C++”如 C++ 23(10 月釋出的版本)“更接近”他最初的理想。

他在敦促 WG21 採用 Profiles 的說明中也強調了這一點:
“正如我之前所說,這也是一個機會,因為型別安全和資源安全(包括記憶體安全)從一開始就是 C++ 的主要目標。
我對此處深有感觸。但請不要被我相對平靜的語言所欺騙。”
Stroustrup 的文章也指出,語言不斷發展的一個問題是“很多人對 C++ 的看法過時了”。“今天,我們仍然看到無數人提到 C/C++ 認為這是一種神秘的語言,通常認為 C++ 是 C語言的一個小擴充套件,包含了 C 的所有糟糕方面,並且還嚴重濫用了複雜的 C++ 特性……”
Stroustrup 一再向人們強調說,C++ 仍在不斷發展中,還有很多“正在進行的工作”和可用於改進的實驗性特性,例如非同步計算和SIMD 的通用模型等好東西。
“一個嚴重的問題是,如何將不同的思想整合成一個連貫的整體,”Stroustrup這樣寫道,“與大多數軟體專案並不相同,也與學術界的大多數計算機科學工作不同。設計一種程式語言需要在一個並非所有相關因素都已知的領域做出決策,並且公認的結果中要幾十年內都不要發生重大變化。”
當然,現在這成了一個難題,而且是一個已知問題。“幾十年來幾乎所有的語言設計努力都失敗了,這一事實表明了這個問題的嚴重性。”
但這並不意味著 C++ 就停止了進化的嘗試……

C++之明顯的改進

配置檔案並不是 21 世紀 C++ 改進的唯一方式。

Stroustrup 這樣說道:“我還要指出,模組是一種使程式碼更簡潔、編譯時間大大縮短的機制,匯入已編譯的模組比使用老式的#include語句可以提高7 到 10 倍的速度優勢” 。

“大多數人現在都可以透過使用 C++23 提供的功能來顯著改進他們的程式碼,”

他還展望未來,預測未來還會有更多效能增強功能。“在 C++26 中,我們可能會看到改進的併發支援、靜態反射和契約,以及許多小改進和標準庫元件。”

這種前瞻性的希望或許可以解釋為什麼 Stroustrup 希望將他對 Profiles 的呼籲建立在 C++ 的更久遠的歷史中。

Stroustrup 的文章“展示了 C++ 的發展方向。安全保障即將到來,這在 C++ 的背景下並不是一個新奇的想法,而是長期目標的一部分。完全型別安全和資源安全是 C++ 的最初目標之一,但推動廣泛的應用領域向前發展需要時間,而且必須逐步完成。”

他意識到已安裝的程式碼庫已經非常廣泛, C++“如今已覆蓋了廣泛的應用領域。安全保障必須且將解決那些已使用 C++ 來提供高質量應用程式的領域。

“關注記憶體安全的人們應該注意到,C++ 並不是 C,並且基於更安全的程式設計風格和強化庫的解決方案已經在 C++ 中廣泛部署。”

結語

現在還不能表明他的ACM文章是否產生了影響,這顯然很難量化。“我不願意對未來做出預測,”Stroustrup 如此說道,“但我們已經看到以概念形式出現的對通用程式設計的更好支援。”

Stroustrup 指出,如果開發者正在尋找有影響力的改進,你也可以超越語言本身。目前有各種各樣的工具可供 C++ 開發人員使用。

“語言不僅僅是你在語言規範或正式標準中找到的東西。”

作者:洛逸

相關閱讀:


相關文章