微软自己算过一笔账——70% 的 Windows 漏洞都是内存安全闹的,今天它把 Rust 抬成和 C++ 平起平坐的一等语言

前阵子微软在 RustConf 上说了句话,很多搞 C++ 的人听完沉默了一下:Windows 这些年被安全团队拉清单的漏洞里,大约 70% 都是内存安全问题——用的还是 C 和 C++。同一场大会上,微软把 Rust 正式抬成了内部一等(Tier-1)语言,和 C++、C#、TypeScript 坐一桌,并且甩出了一个藏了很久的硬货:rustc_codegen_utc。

先说这件事到底意味着什么。Tier-1 不是发个新闻稿喊口号,它意味着一整套「从你本地写完到上线」的铺路:安全工具链构建、开发者工具、质量流程、平台深度集成,以及微软 SDL(安全开发生命周期)合规。翻译成人话:以后在微软内部开新项目,Rust 是一个「官方支持、组织背书」的正经选项,而不是某个团队自己偷偷试的小工具。

rustc_codegen_utc 到底是什么

它是 rustc 的一个替代代码生成后端,和已有的 rustc_codegen_llvm、rustc_codegen_gcc、rustc_codegen_cranelift 是同一个后端接口家族里的兄弟。区别在于:它把 rustc 接到微软自家的 MSVC 后端上(内部叫 UTC),让 Rust 和 C++ 走完全同一套代码生成、优化、加固、服务管线。

为什么这事重要?因为在 Windows 上,MSVC 和 Windows 一起演化了二三十年,C/C++ 是这个平台的「母语」。这积累里包括:

  • 二进制加固与代码安全特性(Control Flow Guard、CET 这类)
  • 链接后的合规检查、分析、热补丁(Hotpatch,不重启就能修运行中的代码)
  • 跨语言内联、SPGO(Sample Profile Guided Optimization,采样引导优化)
  • 调试、崩溃转储分析、性能剖析、覆盖率

以前 Rust 想用这些能力,要么等 LLVM 那边跟进,要么给每个 Windows 专属功能再做一套平行实现。rustc_codegen_utc 的思路很直接:不重造轮子,直接把 rustc 插进这套已经打磨了几十年的后端,Rust 自动继承全部能力。

反过来看 Linux 侧就很好理解。在 Linux 上,一个混合 Rust/C++ 项目如果把 C++ 用 Clang 编译,两边本来就共享同一个 LLVM 后端;rustc_codegen_utc 做的,就是给 Windows 原生 MSVC 项目补上这个「共享后端」的待遇。

已经在跑,不是 PPT

这点值得单独拎出来:rustc_codegen_utc 不是画饼。它由微软 DevDiv 一个专门团队投入,2026 年初就已经生产可用,从 Rust 1.90 起完成自举(self-host),目前已经有 100 多个微软内部仓库在用它构建,而且每周还在继续推广。

落地场景也不是边角料:Oxidizer(构建可扩展 Rust 服务的 crate)已经用在 Microsoft 365 的核心服务里——Outlook、Word、Excel、OneDrive、SharePoint;Copilot 的 AI 栈大量用 Rust;Azure 提供 Rust SDK,以及在 App Service、Functions、Kubernetes Service 上的部署路径。

但「无缝互操作」这四个字先别急着信

微软在文章里自己承认了:代码生成、平台怪癖、ABI、异常处理、链接期工具,这些只是互操作难题的一半。另一半语言层面的东西——FFI 契约、绑定生成、语言语义差异、构建系统集成——正在微软内部以及整个行业层面推进,包括 Rust Foundation 的互操作性计划(Interop Initiative)。

社区里的资深 C++ 工程师说得更直白:让庞大的遗留 C++ 代码库迁到 Rust 难度极大,「无缝」仍然是个重大障碍。Rust 编译器能标出内存错误,但通常管不到指向 C++ 分配的裸指针。所以别把这次发布读成「微软要用 Rust 重写 Windows」,官方说法是双语言并存、共享基础设施,而且这种混合模型还会持续很多年。

对普通开发者意味着什么

三个可以立刻用上的判断:

  1. Windows 原生 + Rust 的坑会越来越少。 加固、热补丁、崩溃转储、覆盖率这些以前「Rust 上总差点意思」的地方,会随着共享后端逐步对齐。做 Windows 客户端、驱动、服务的团队值得开始评估。
  2. 混合 Rust/C++ 项目是主战场,不是纯 Rust 重写。 跨语言内联和 SPGO 这类能力,只有在真正混着写的项目里才体现价值。如果你手上有一大坨 C++,别想着推倒重来,想的是边界怎么切。
  3. 互操作仍是最大风险点。 FFI 契约、异常跨越语言边界、构建系统集成,这些短期不会自动变好。真要动手,先把边界层的 unsafe 约定和错误处理写清楚,再谈性能。

下一步其实很简单:如果你是 Windows 平台的开发者,去看一眼 rustfoundation.org 上这篇 guest post 的原文,重点看 rustc_codegen_utc 那段列出的七类能力清单,对照你自己项目里「因为不好用所以一直没上 Rust」的具体理由,看看哪些已经被这套后端覆盖了。剩下的,大概率就是真正的互操作难题——那部分才是接下来几年要啃的硬骨头。

评论区

0 条评论

登录后可评论。

铁锈·Rust工具链 16 阅读