Video thumbnail for A New Era for C and C++? Goodbye, Rust?

C/C++大反擊!告別Rust?記憶體安全新紀元來臨!

Summary

Language:

Quick Abstract

面對美國政府大力推動轉向記憶體安全語言,C 與 C++ 開發者們如何應對?本摘要將探討 C/C++ 社群為提升記憶體安全所做的努力,並介紹三種解決方案:Safe C++、Phil C 和 Trap C,旨在讓開發者能繼續使用熟悉的 C 語言,同時解決潛在的記憶體安全問題。

  • Safe C++: 致力於擴展 C++,打造一個具備如 Rust 語言般強大安全保證的超集,其設計靈感來自 Rust 的概念。

  • Phil C: 一種記憶體安全的 C 語言變體,目標是 100% 兼容現有 C/C++ 程式碼,只需透過 Phil C 的編譯器編譯即可獲得記憶體安全防護。

  • Trap C: 一個 C 語言的分支,目標是創建一個記憶體安全的 C 版本,可以防止常見的漏洞,如緩衝區溢出、區段錯誤和記憶體洩漏。

這些方案代表著 C/C++ 社群在記憶體安全議題上的積極嘗試,為現有專案提供更多選擇,無需完全重寫程式碼。

本影片將探討 C 及 C++ 社群如何應對目前熱烈的記憶體安全議題,以及開發者們如何使 C 及 C++ 語言達到記憶體安全。

美國政府的推動

美國政府,特別是網路安全和基礎設施安全局 (CISA) 和聯邦調查局 (FBI),正大力推動從 C 和 C++ 轉向更注重記憶體安全的語言,如 Rust。

  • CISA 網站上提到,針對現有的以記憶體不安全語言編寫的產品,若未在 2026 年 1 月 1 日前發布記憶體安全路線圖,將會對國家安全、經濟安全以及公共衛生和安全構成重大風險。

  • CISA 建議軟體製造商應以系統性方式防止記憶體安全漏洞,例如使用記憶體安全語言或硬體功能。

C 及 C++ 社群的回應

這個推動引發了 C 及 C++ 社群的廣泛討論和批評。C 及 C++ 開發者不滿被認為技術能力不足,或是認為 C 及 C++ 語言本身存在缺陷。

  • C 及 C++ 都是優秀的語言,同時 Rust 也是一個提供強大安全保證的優秀語言。

  • 許多底層套件是用 C 語言編寫的。

記憶體安全問題的嚴重性

儘管 C 及 C++ 語言各有優點,但不可否認的是,記憶體安全漏洞是一個需要解決的重要問題。

  • 微軟報告指出,每年透過安全更新解決的漏洞中,約有 70% 是記憶體安全問題。

  • Google 發現 Chromium 專案中約 70% 的嚴重安全錯誤都是記憶體安全問題。

  • Mozilla 報告稱,他們分析的 34 個嚴重高危漏洞中,有 32 個(94%)與記憶體相關。

  • Google 的 Project Zero 團隊發現,在野外利用的零日漏洞中,67% 是記憶體損壞漏洞。

這些問題包括緩衝區溢位、釋放後使用 (use-after-free)、堆疊和堆積耗盡、記憶體洩漏、空指標解引用 (null pointer dereference) 和懸掛指標 (dangling pointer) 等。

C 及 C++ 開發者的選擇

許多 C 及 C++ 開發者不願意學習 Rust,他們認為 Rust 的學習成本太高、不夠安全,而且重寫程式碼庫非常麻煩。

  • 他們熱愛 C 及 C++,希望繼續使用這些語言,而不必學習新語言。

  • Rust 除了記憶體安全之外,並沒有提供相較於 C 及 C++ 的重大優勢。

因此,一些開發者開始討論甚至實施如何將記憶體安全引入 C 及 C++ 語言中,而不是放棄這些語言。

記憶體安全解決方案

以下介紹三種旨在將記憶體安全引入 C 及 C++ 的解決方案:

Safe C++ Project

Safe C++ 旨在擴展 C++ 的安全性,創建一個 C++ 的超集,提供與 Rust 程式碼相同的安全保證。

  • 主要功能包括安全上下文、借用檢查 (borrow checking)、初始化分析、模式匹配、選擇型別 (Choice types) 以及借用線程安全功能。

  • 目標是在保持效能和零成本抽象的同時實現這些功能。

  • 這不僅僅是最佳實踐,而是一項用於確保記憶體安全的新技術,包括編譯時智慧。

  • 目前仍在開發中,尚未完全實現,但相關提案已公開。

Phil C

Phil C 是由 Epic Games 的語言工程高級總監 Philip Pizlo 創建的記憶體安全 C 語言變體。

  • 目標是與 C 和 C++ 100% 相容,只需使用 Phil C 編譯器即可獲得記憶體安全。

  • Phil C 不允許任何形式的「逃生艙口」(escape hatch),例如 Rust 中的 unsafe 關鍵字。

  • 大多數程式無需修改即可編譯和運行。

  • 目前僅適用於 Linux,速度比傳統 C 慢 1.5 到 5 倍,但正在努力優化效能,目標是達到 1.2 倍的速度。

  • 作者希望 Phil C 能消除對 Rust 的需求。

Trap C

Trap C 是在 2024 年 11 月於泰國曼谷舉行的 w214 會議上,由 Robin Row 提出的一種新的記憶體安全 C 語言變體。

  • 可以將其視為 C 的一個記憶體安全分支。

  • 旨在創建一個記憶體安全的 C 版本,防止常見的漏洞,如緩衝區溢位、分段錯誤和記憶體洩漏。

  • 設計上與 C 連結相容,使用相同的 ABI(應用程式二進位介面)。

  • 安全功能包括指標不能產生分段錯誤或緩衝區溢位、自動記憶體管理以防止洩漏、無 unsafe 關鍵字,以及類似 C 和 C++ 的語法,使 C 程式設計師更容易採用。

  • 與 C 的不同之處在於,Trap C 包含 C++ 建構子和解構子,刪除了一些不常用的關鍵字,並實現了自動邊界檢查和指標歸零 (pointer nullification)。

結論

C 及 C++ 社群似乎不打算學習新的語言,而是致力於以某種方式使現有語言具有記憶體安全性。

Was this summary helpful?

Quick Actions

Watch on YouTube

Related Summaries

No related summaries found.

Summarize a New YouTube Video

Enter a YouTube video URL below to get a quick summary and key takeaways.