在美國(guó)國(guó)家安全局 (NSA) 建議組織從 C/C++ 切換到內(nèi)存安全語(yǔ)言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回應(yīng)稱,在他看來(lái),NSA 報(bào)告中提到的 “安全” 編程語(yǔ)言在重要應(yīng)用程序中實(shí)際上并不優(yōu)于 C++。
Bjarne 指出,NSA 的這一判定忽略了 C/C++ 三十多年來(lái)的進(jìn)步;且許多 C++ 的用例也停留在遙遠(yuǎn)的過(guò)去而忽視了改進(jìn),其中就包括極大地提高安全性的方法。
現(xiàn)在,如果我認(rèn)為這些 “安全” 語(yǔ)言中的任何一種在我關(guān)心的使用范圍內(nèi)都比 C++ 優(yōu)越,我就不會(huì)認(rèn)為 C/C++ 的淡出是一件壞事,但事實(shí)并非如此。另外,正如所描述的那樣,“安全” 僅限于內(nèi)存安全,而忽略了一種語(yǔ)言可能(并且將會(huì))被用來(lái)違反某種形式的安全和保障的十幾種其他方式。
Bjarne 表示,自己幾十年來(lái)一直致力于實(shí)現(xiàn)更好、更安全、更高效的 C++。特別是關(guān)于 C++ Core Guidelines 的工作,旨在為有需要的人提供靜態(tài)保證的類型安全和資源安全的 C++。符合 C++ Core Guidelines 的良好靜態(tài)分析器可以為 C++ 代碼安全提供必要的保證,且比升級(jí)到更新的安全編程語(yǔ)言要簡(jiǎn)單得多。
他批評(píng) NSA 的報(bào)告只關(guān)注內(nèi)存處理問(wèn)題,而忽略了許多其他影響項(xiàng)目安全性和可靠性的編程語(yǔ)言問(wèn)題。并建議使用代碼注釋和編譯器選項(xiàng)來(lái)控制規(guī)則的包含,以確保類型和資源得到安全處理??紤]到可能對(duì)項(xiàng)目造成的破壞,他保證 C++ 社區(qū)不會(huì)忽視安全問(wèn)題,但只關(guān)注安全問(wèn)題也不行。因此他計(jì)劃列出一份可被視為安全問(wèn)題(包括 UB)的問(wèn)題清單,并找到預(yù)防這些問(wèn)題的方法。
此外,Bjarne 在與日前 InfoWorld 的郵件溝通中補(bǔ)充道,“太多人談?wù)撋裨挵愕?C/C++ 語(yǔ)言,但轉(zhuǎn)頭卻去關(guān)注 C 部分的弱點(diǎn)。許多這些弱點(diǎn)在 C++ 中是可以避免的,通常可以通過(guò)編寫更高效的代碼來(lái)更直接地表達(dá)程序員的意圖”。
郵件中 Bjarne 也分享了他對(duì)安全的定義:目標(biāo)是類型和資源安全,即每個(gè)對(duì)象都根據(jù)其類型使用,沒有資源泄漏。對(duì)于 C++,這意味著一些運(yùn)行時(shí)范圍檢查,消除通過(guò)懸空指針的訪問(wèn),并避免誤用強(qiáng)制轉(zhuǎn)換和聯(lián)合。C++ 提供 high-level 工具,例如容器、span、range-for 循環(huán)和變體,它們可以在不損害生產(chǎn)力或效率的情況下提供保證。關(guān)于 NSA 引用的所謂安全語(yǔ)言,Bjarne 則表示,所有這些語(yǔ)言都容易受到未經(jīng)靜態(tài)驗(yàn)證的代碼的攻擊。此外,每個(gè)系統(tǒng)都必須使用硬件,而有效的硬件訪問(wèn)很少是安全的。
Bjarne 還概述了他安全使用 C++ 的策略:
靜態(tài)分析以驗(yàn)證沒有不安全的代碼被執(zhí)行。
簡(jiǎn)化代碼的編碼規(guī)則,使工業(yè)規(guī)模的靜態(tài)分析可行。
使此類簡(jiǎn)化代碼相當(dāng)容易編寫并確保在需要時(shí)進(jìn)行運(yùn)行時(shí)檢查的庫(kù)。
目前共存在數(shù)百萬(wàn) C++ 程序員和數(shù)十億行 C++ 代碼,該語(yǔ)言目前的主要用途包括航空航天、醫(yī)療儀器、人工智能 / 機(jī)器學(xué)習(xí)、生物醫(yī)學(xué)、高能物理學(xué)等。
審核編輯 :李倩
-
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74587 -
代碼
+關(guān)注
關(guān)注
30文章
4880瀏覽量
70025 -
Rust
+關(guān)注
關(guān)注
1文章
233瀏覽量
6889
原文標(biāo)題:C++ 之父:Rust等內(nèi)存安全語(yǔ)言的安全性并不優(yōu)于C++
文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
《C++程序設(shè)計(jì)原理與實(shí)踐》(C++之父最新力作)
C語(yǔ)言C++運(yùn)用
OpenHarmony應(yīng)用開發(fā)為什么不首選C/C++作為應(yīng)用開發(fā)語(yǔ)言呢
OpenHarmony為什么不首選C/C++作為應(yīng)用開發(fā)語(yǔ)言?
如何提高c和c++的安全編程能力?《C和C++安全編碼》帶你詳細(xì)學(xué)習(xí)
微軟未來(lái)將使用 Rust 作為 C、C++ 以及其他編程語(yǔ)言的替代方案
微軟開始嘗試使用Rust代替C/C++,介紹這些運(yùn)用Rust的產(chǎn)品
C語(yǔ)言與C++相互調(diào)用

C++語(yǔ)言的發(fā)展
Rust語(yǔ)言助力Android內(nèi)存安全漏洞大幅減少
Rust和C++哪個(gè)更好入門
取代C++!微軟用Rust改寫的Win11內(nèi)核來(lái)了

使用C++編寫通用庫(kù)并在 Rust 中使用它 (WASI)

C++之父新作帶你勾勒現(xiàn)代C++地圖

評(píng)論