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