整理 | 鄭麗媛
上個(gè)月,美國(guó)白宮國(guó)家網(wǎng)絡(luò)主任辦公室(ONCD)在一份主題為《回到基礎(chǔ)構(gòu)件:通往安全軟件之路》的 19 頁(yè) PDF 報(bào)告中,呼吁開(kāi)發(fā)人員停止使用容易出現(xiàn)內(nèi)存安全漏洞的編程語(yǔ)言,例如 C 和 C++,應(yīng)改用 Rust 等內(nèi)存安全編程語(yǔ)言進(jìn)行開(kāi)發(fā)。
對(duì)于這個(gè)觀點(diǎn),上周 C++ 之父 Bjarne Stroustrup 在接受 InfoWorld 的采訪時(shí)進(jìn)行了反駁:
“我感到驚訝的是,這些政府文件的作者似乎對(duì)當(dāng)代 C++ 的優(yōu)勢(shì)以及它為提供強(qiáng)大安全保證所做的努力都視而不見(jiàn)。另一方面,他們似乎已經(jīng)意識(shí)到,編程語(yǔ)言只是工具鏈的一部分,因此改進(jìn)工具和開(kāi)發(fā)流程至關(guān)重要。”
Stroustrup 強(qiáng)調(diào),這門于 1979 年設(shè)計(jì)的編程語(yǔ)言,自誕生的第一天起,其目標(biāo)就一直是提高安全性:“只要將 K&R C 語(yǔ)言與最早的 C++、早期的 C++ 以及當(dāng)代的 C++ 進(jìn)行比較就知道了。”圍繞這個(gè)問(wèn)題,Stroustrup 曾在 CppCon 2023 大會(huì)的主題演講中概述了這一演變過(guò)程,可以發(fā)現(xiàn)許多高質(zhì)量的 C++ 都是使用基于 RAII(Resource Acquisition Is Initialization)、容器和資源管理指針的技術(shù)編寫的,而非傳統(tǒng)的 C 風(fēng)格指針亂碼。
除此之外,Stroustrup 還提到了他們?yōu)楦倪M(jìn) C++ 安全性做出的一些努力:“在安全性方面主要存在兩個(gè)問(wèn)題。在數(shù)十億行的 C++ 代碼中,很少有代碼能完全遵循現(xiàn)代準(zhǔn)則,而且人們對(duì)安全重要性的認(rèn)識(shí)也存在差異。我和 C++ 標(biāo)準(zhǔn)委員會(huì)正在努力解決這個(gè)問(wèn)題。”
“Profiles 是一個(gè)框架,用于說(shuō)明一段代碼所需要的 guarantees,并使實(shí)現(xiàn)能夠驗(yàn)證這些保證。委員會(huì)網(wǎng)站上有相關(guān)文件,搜索 WG21 即可(https://www.open-std.org/jtc1/sc22/wg21/)。然而,我們中的一些人并不想等待委員會(huì)必然緩慢的進(jìn)展。
Profiles 這個(gè)框架,允許我們逐步改進(jìn) guarantees,例如較快地消除大多數(shù) range errors,并通過(guò)局部靜態(tài)分析和最小化運(yùn)行時(shí)檢查逐步將 guarantees 引入大型代碼庫(kù)。我對(duì) C++ 的長(zhǎng)期目標(biāo),一直是在需要的時(shí)候提供類型和資源安全。也許當(dāng)前對(duì)內(nèi)存安全性的推動(dòng)——我想要的 guarantees 的一個(gè)子集——將有助于我的努力,C++ 標(biāo)準(zhǔn)委員會(huì)中的許多人也都贊同我的觀點(diǎn)。”