編輯 | 言征
出品 | 51CTO技術(shù)棧(微信號:blog51cto)
14日消息,ISO C++委員會主席赫伯·薩特(Herb Sutter)已經(jīng)于本周從微軟離職,此前他已經(jīng)為微軟效力了22年,并選擇加入Citadel Securities擔任技術(shù)研究員,負責技術(shù)戰(zhàn)略和培訓。他將繼續(xù)擔任ISO委員會主席,并稱2024年是C++語言的“關(guān)鍵一年”。
圖片
1.“危險”的C++,內(nèi)存安全性進展算不上快
正如薩特所說,2024年是C++的關(guān)鍵之年。
更大一部分還是來自美國政府的壓力。因為提升內(nèi)存安全已上升到美國國家安全議題。受到白宮、“五眼”情報機構(gòu)、聯(lián)邦執(zhí)法機構(gòu)及美國網(wǎng)絡(luò)安全與基礎(chǔ)設(shè)施局等機構(gòu)的支持。這一點并非空穴來風,根據(jù)谷歌的數(shù)據(jù),內(nèi)存安全漏洞約占零日漏洞的 75%,并且在大型代碼庫中的嚴重漏洞中,約 70% 都源于此類漏洞。
不巧的是,作為老語種,C 和 C++ 經(jīng)常引發(fā)內(nèi)存安全漏洞,因為它們依賴手動內(nèi)存管理。手動內(nèi)存管理的優(yōu)勢是通常性能更好,開銷更小,對比 Python 或 Java 這樣的語言則通過垃圾回收來管理內(nèi)存。然而,手動內(nèi)存管理可能會導致緩沖區(qū)溢出、使用釋放后的內(nèi)存等內(nèi)存相關(guān)的錯誤。
今年2月,美國白宮就宣布需要在C和C++上采取一些措施來提升內(nèi)存安全,要么就切換到Rust。
這在 C 和 C++ 社區(qū)中,這引發(fā)了廣泛的討論,因為這兩種語言都不具備內(nèi)存安全性,并且能否實現(xiàn)內(nèi)存安全都存在很大爭議。
當時 C++ 社區(qū)的一個回應(yīng)是提出了 Safe C++ 的提案。
當時還是C 和 C++ 委員會成員的前計算機科學教授、產(chǎn)品設(shè)計師及圖形專家Robin Rowe 提到了 C++ 之父的決定。
據(jù) Rowe 所言,C++ 語言的創(chuàng)建者 Bjarne Stroustrup 表示他一直在研究“Profiles” [PDF],并希望繼續(xù)下去?!拔液茏鹁?Bjarne,但我不認為 Profiles 是正確的答案,” Rowe 說。“而在 C 社區(qū),答案則更不明確,沒有真正的行動計劃。”
C++ 中一些最大的內(nèi)存安全漏洞是從 C 繼承的?!霸?月的會議上,我們討論了如何改進異常處理,使 C++ 能有更好的錯誤處理能力?!盧owe 表示,游戲開發(fā)、嵌入式系統(tǒng)及高可用性服務(wù)器的開發(fā)者通常禁用異常,因為它們具有非確定性并且會帶來性能問題。
那么,C++對于安全性的實際動作和方向是什么?在之后的CppCon上,薩特表示,安全性并不等同于完美,但將優(yōu)先解決“易達的安全目標”,包括在標準庫中引入更多安全庫、消除與安全相關(guān)的未定義行為、增加編譯時的靜態(tài)安全規(guī)則和動態(tài)安全檢查。
2.C++26:2026年中期完成,自C++11以來影響最大的一次變革
薩特在9月的CppCon會議上表示,“C++ 26標準可能會改變我們開發(fā)軟件的方式”,并將成為自C++11以來對語言影響最大的一次變革。C++ 26標準預計將在2026年中期完成,目前Clang和GCC等編譯器中的某些特性已開始逐步實現(xiàn)。
薩特指出了C++ 26的四個關(guān)鍵特性:
·對std::execution(用于異步操作的標準庫)的改進,以增強并發(fā)性和并行性。
·類型和內(nèi)存安全性增強,目標是與其他現(xiàn)代、更安全的語言接軌。
·反射和代碼生成,這是“我們轉(zhuǎn)向編譯時編程的一個重大變化”,也是“可能最具影響力的特性”。
·合約特性,用于指定接口并檢查其符合性,包括前置條件、后置條件和狀態(tài)斷言。
薩特在本周的博客中提到,上一個里程碑C++11版本為現(xiàn)代C++引入了auto、lambda表達式和智能指針等特性,而C++ 26的特點將是“默認安全”以及對基于反射的生成型編譯時庫的全面支持。
薩特對該語言充滿熱情:“反射/生成帶來了無限可能!期待完整標準化和編譯器實現(xiàn)!”有開發(fā)者在演講后評論道。
然而,也有開發(fā)者對語言的日益復雜表示擔憂:“整個語言變得如此復雜。像Cppfront這樣的項目有所幫助,但我們需要一個從C++灰燼中崛起的新語言,而不是Rust?!盋ppfront是薩特創(chuàng)建的一個實驗性編譯器,用于驗證新概念。
由于需要與遺留代碼保持兼容性,因此添加語言特性總是比刪除它們更容易。
3.實施C++新特性,微軟有些緩慢
薩特曾在微軟從事Visual C++的工作,這是該公司在Windows和Office等關(guān)鍵應(yīng)用程序中廣泛使用的工具。
考慮到薩特在ISO委員會中的職務(wù),Visual C++在實施新的C++特性方面相較于Clang和GCC往往較為緩慢,這一點頗為奇怪。
有人認為,部分原因是因為近年來,微軟內(nèi)部一些知名人士出于安全性和可靠性的考慮,主張轉(zhuǎn)向Rust,Azure首席技術(shù)官Mark Russinovich就是其中之一。
4.改進C++內(nèi)存安全新思路
當然,C++也在努力實現(xiàn)白宮的內(nèi)存安全的要求,并不是只有轉(zhuǎn)向Rust這一條可走。
本周Rowe 就提出了一種改進內(nèi)存管理的TraPC思路,利用編譯器的智能,避免不必要的指針檢查,以提升性能。他希望編譯器能夠自動清零越界的指針,從而避免產(chǎn)生危險的“野指針”。
TrapC 的設(shè)計理念是讓 C 語言保留大致不變的樣式,但指針和錯誤處理以更透明的方式進行。
不過,由于現(xiàn)有的 C++ 標準委員會流程緩慢,Rowe 認為走傳統(tǒng)提案路線過于耗時,因此選擇直接分叉 C 語言。
參考鏈接:https://devclass.com/2024/11/12/iso-c-chair-herb-sutter-leaves-microsoft-declares-forthcoming-c-26-most-impactful-release-since-c11/


2009-06-05 14:54:09
2023-11-27 15:03:26




