在美國國家安全局 (NSA) 建議組織從 C/C++ 切換到內存安全語言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回應稱,在他看來,NSA 報告中提到的 “安全” 編程語言在重要應用程序中實際上并不優于 C++。
Bjarne 指出,NSA 的這一判定忽略了 C/C++ 三十多年來的進步;且許多 C++ 的用例也停留在遙遠的過去而忽視了改進,其中就包括極大地提高安全性的方法。
現在,如果我認為這些 “安全” 語言中的任何一種在我關心的使用范圍內都比 C++ 優越,我就不會認為 C/C++ 的淡出是一件壞事,但事實并非如此。另外,正如所描述的那樣,“安全” 僅限于內存安全,而忽略了一種語言可能(并且將會)被用來違反某種形式的安全和保障的十幾種其他方式。
Bjarne 表示,自己幾十年來一直致力于實現更好、更安全、更高效的 C++。特別是關于 C++ Core Guidelines 的工作,旨在為有需要的人提供靜態保證的類型安全和資源安全的 C++。符合 C++ Core Guidelines 的良好靜態分析器可以為 C++ 代碼安全提供必要的保證,且比升級到更新的安全編程語言要簡單得多。
他批評 NSA 的報告只關注內存處理問題,而忽略了許多其他影響項目安全性和可靠性的編程語言問題。并建議使用代碼注釋和編譯器選項來控制規則的包含,以確保類型和資源得到安全處理。考慮到可能對項目造成的破壞,他保證 C++ 社區不會忽視安全問題,但只關注安全問題也不行。因此他計劃列出一份可被視為安全問題(包括 UB)的問題清單,并找到預防這些問題的方法。
此外,Bjarne 在與日前 InfoWorld 的郵件溝通中補充道,“太多人談論神話般的 C/C++ 語言,但轉頭卻去關注 C 部分的弱點。許多這些弱點在 C++ 中是可以避免的,通常可以通過編寫更高效的代碼來更直接地表達程序員的意圖”。
郵件中 Bjarne 也分享了他對安全的定義:目標是類型和資源安全,即每個對象都根據其類型使用,沒有資源泄漏。對于 C++,這意味著一些運行時范圍檢查,消除通過懸空指針的訪問,并避免誤用強制轉換和聯合。C++ 提供 high-level 工具,例如容器、span、range-for 循環和變體,它們可以在不損害生產力或效率的情況下提供保證。關于 NSA 引用的所謂安全語言,Bjarne 則表示,所有這些語言都容易受到未經靜態驗證的代碼的攻擊。此外,每個系統都必須使用硬件,而有效的硬件訪問很少是安全的。
Bjarne 還概述了他安全使用 C++ 的策略:
靜態分析以驗證沒有不安全的代碼被執行。
簡化代碼的編碼規則,使工業規模的靜態分析可行。
使此類簡化代碼相當容易編寫并確保在需要時進行運行時檢查的庫。
目前共存在數百萬 C++ 程序員和數十億行 C++ 代碼,該語言目前的主要用途包括航空航天、醫療儀器、人工智能 / 機器學習、生物醫學、高能物理學等。
審核編輯 :李倩
-
C++
+關注
關注
22文章
2114瀏覽量
73859 -
代碼
+關注
關注
30文章
4828瀏覽量
69056 -
Rust
+關注
關注
1文章
230瀏覽量
6665
原文標題:C++ 之父:Rust等內存安全語言的安全性并不優于C++
文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論