
美国网络安全和基础设施局(CISA)与联邦调查局(FBI)于 2024 年 10 月联合发布《产品安全不良实践》(《Product Security Bad Practices》)报告。报告指出,新开发的软件若使用 C 或 C++ 等内存不安全语言,将对国家安全、经济安全和医疗安全构成重大隐患;正在使用的 C/C++ 编写软件,需在 2025 年底前发布内存安全路线图,否则也将被认定为国家安全隐患。
内存漏洞一直是软件行业的顽疾,C++ 在这一问题上的处境尤为被动。一方面,Rust 等新生代内存安全语言正在加速抢夺 C++ 的市场份额;另一方面,C++ 需应对全球监管对内存安全的严格要求。为此,C++ 创始人比雅尼・斯特劳斯特鲁普(Bjarne Stroustrup)提出了 Profiles 框架,核心思路是通过定制化规则限制高危语法,同时充分兼顾既有 C++ 代码的兼容性,力求实现 “安全提升” 与 “资产保留” 的兼得。
遗憾的是,国际标准化组织(ISO)下属的 C++ 工作组 WG21 并未采纳 Profiles 框架方案。WG21 认为该框架缺乏可落地的实现方案:其核心是通过定制化规则限制高危语法,但比雅尼仅提出了宏观理念,未给出编译器层面的具体实现路径 —— 例如如何让编译器精准识别不同模块的 Profile 标记、如何处理规则冲突、如何平衡规则执行与编译效率等关键技术问题,均未明确答案。
为了缓解内存漏洞问题、延长 C++ 的应用生命周期,C++ 社区衍生出了 Cppcheck、Clang-tidy 等静态分析工具。这些工具(无论开源与否)呈现 “百花齐放” 的态势,各自拥有不同的设计思路与技术路线。但这种现状实则有些 “饮鸩止渴”:工具碎片化导致代码、工具库乃至开发经验难以共享,反而进一步增加了 C++ 通过标准化推进内存管理优化的难度。
只有形成统一的安全规范与协作机制,C++ 才能在保留既有资产的同时迎接新的安全要求。否则,它将不再是关键基础设施的支柱语言,而只是被时代逐渐取代的遗留技术。