微软加码押注Rust:将其提升为内部Tier-1编程语言
作者: CBISMB
责任编辑: 邹大斌
来源: CBISMB
时间: 2026-10-04 22:01
关键字: 微软 ,Rust ,编程语言 ,Visual C++ ,内存安全
浏览: 0
点赞: 0
收藏: 0
微软已将Rust编程语言在内部提升为Tier-1地位,并开始将其与微软Visual C++工具链集成,用于Windows开发。
在多年观察微软如何构建平台、并向外部用户推广技术之后,有一点很清楚:任何对微软内部重要的东西,很快就会对任何在Windows或Azure之上构建应用的人变得重要。
从内部工具到外部工具的转变,总是以Visual Studio和Visual Studio Code中新增功能的形式出现。这些能力往往已在微软内部使用多年,随时可供你在自己的软件中使用。我们此前已多次看到这种情况,例如C#和TypeScript的发展历程。
微软的Tier-1编程语言
C#和TypeScript,和它们之前的C++一样,被微软内部称为Tier-1语言。这一地位有赖于:由从编辑器到编译器的完整工具链支撑;通过原生SDK和优化库与Windows和Azure集成;以及符合微软内部的软件开发生命周期要求。当你为十亿用户交付软件时,这些配套设施不是可选的添头,而是必需品。
如今,Tier-1俱乐部多了一位新成员:Rust语言。这并不令人意外,因为Azure CTO Mark Russinovich曾谈到其团队对Rust的投入,以及Rust的内存安全特性如何成为微软安全战略的关键组成部分。此外,微软是Rust基金会的创始成员,并在Rust的Windows工具链、以及作为微软构建平台一部分运行的Rust编译器上投入了大量资金。如今,Rust在微软内部享有一流的开发工具与工作流。
Rust基金会网站上近期的一篇博文,详细介绍了微软如何致力于将Rust与现有的微软Visual C++(MSVC)平台集成。这一做法让微软得以确保该博文所称的两种语言之间的“无缝互操作”,Rust会随着Visual C++功能的交付而继承这些特性。将Visual C++与Rust配合使用,可以让Rust被用于构建底层Windows服务,从驱动程序到内核本身。
我们已经在Windows版Coreutils中看到这一点,那是对核心UNIX命令的Rust重新实现。Coreutils让你能在Windows终端内使用某些UNIX命令,从而轻松在Windows与WSL(Windows Subsystem for Linux)托管的Linux发行版之间切换。既然Rust已跨过Tier-1门槛,我们可以预期看到更多基于Rust的Windows开发工具,让我们在访问底层功能的同时避免内存泄漏。
秘方:新的Rust代码生成器
用Rust交付生产级Windows软件的一个关键,是面向Rust编译器rustc的一款新代码生成工具。rustc被设计为可以使用默认LLVM之外的不同代码生成后端。目前已有可与GCC和Cranelift配合的变体。如果你没接触过Cranelift,它是Bytecode Alliance的代码生成器,作为wasmtime框架的一部分使用。添加一个新的代码生成器,就是构建一个连接到Rust编译器API的工具:它接收编译器的字节码输出,生成原生代码,再传递给你选择的构建流水线。
这正是微软rustc_codegen_utc工具所扮演的角色。它被设计为与现有MSVC栈协同工作,让Rust能够访问Windows开发平台中成熟、经过充分测试、久经验证的部分,而无需对你的代码做任何修改,兼容性已内置。这将Rust直接连接到Visual C++编译器的后端,一套由微软构建系统编排、用于处理混合代码与库的复杂项目的工具。
微软称这个后端为UTC,即Universal Tuple Compiler,也就是通用元组编译器。不过你不会在任何地方看到这个名字;实际代码是一个DLL,即C2.DLL。代码以.OBJ文件的形式生成和交付,随后可传递给MSVC链接器,并作为二进制可执行文件交付。这让Rust工具能够利用微软数十年来在编译器和构建工具上的投入。微软无需重复这些工作,从而确保现有的安全性与韧性特性延续到Rust编译器链中。而生成的代码,与经过同一后端处理的C和C++代码兼容。
只维护单一编译器后端,也将使支持Rust的成本更低,无需运行两个可能彼此脱节、并与Windows SDK及内核开发脱节的编译器团队。降低Rust的经济影响将加快任何转换,并支持很可能是长期的、Rust与C++应用相结合的混合交付。
这一做法还让微软的Rust开发,与那些使用GCC和LLVM编译器的平台处于同等水平,这些平台已经可以让Rust使用GCC和Clang后端,从而借助对Linux和macOS应用开发的投入。无论你最终面向哪个平台,用Rust开发的代码都将获得相同的互操作能力。
面向大众的微软Rust工具
对我们其他人来说不幸的是,rustc_codegen_utc目前仅在内部可用,不同于其他Rust编译器codegen工具,它们都是开源项目。微软称其“已具备生产就绪”,并且它被一百多个微软Rust项目使用,这有趣地指向了雷德蒙德对Rust的采用规模。它并非目前唯一被隐藏起来的Rust工具,因为微软完整的Rust工具链还包括其自有的核心rustc编译器和标准库构建。
这并不意味着rustc_codegen_utc不会向大众开放。过往经验表明,它以及无疑还有其他Rust工具,将随Visual Studio或Visual Studio Code的一次重大更新到来。然而,时机总是难以预测。即便在微软内部运作良好的工具对外部开发者高度适用,它要走向全世界,也还需要更多东西:语言服务器和IntelliSense支持,以及与Visual Studio调试器平台的完整集成。在微软办公室之外构建代码,还有更多要求,因为我们无法使用其自定义构建工具。
在Rust编译器论坛的讨论中,微软表示将首先把其测试和后端基础设施的工作向上游贡献给更广泛的Rust项目。这意味着公开版本可能还需一段时间,但也意味着开源这个项目显然已在微软的考虑之中。让rustc_codegen_utc公开很重要,采用Rust来构建第三方设备驱动,应有助于让PC、服务器和云虚拟机更加稳定,并降低安全风险。
在VS Code中开始使用Rust
目前,微软提供与Visual Studio Code集成的Rust工具,以及使用Rust在Windows上开发的指南。要使用微软面向VS Code的Rust语言扩展rust-analyzer,你仍然需要MSVC C++ Build Tools来编译和构建代码,以及一个由微软开发的Windows crate,它让你直接访问Windows API。一个自动化流程会从Windows API收集元数据,确保它们始终是最新的。微软还提供了关于Windows API调用与结构如何投射到Rust的文档。
现在就开始使用现有的Rust工具,熟悉用一门新语言进行Windows开发,是值得的。这样一来,你就能开始利用Rust的内存安全特性,理解这门语言如何工作,以及你需要对编程风格做出哪些改变。等到微软开始向大众发布其新的内部工具时,你就可以用它来构建需要与微软自己的C++互操作的底层代码,例如驱动程序或库。






京公网安备:11010502051901号