微软推出了基于 Rust 的 Windows 运行时项目 Rust/WinRT。该项目和 C++/WinRT 一脉相承,用标准语言和编译器为 Windows 运行时构建语言投影,从而方便 Rust 开发人员调用 Windows API,更轻松地使用 Rust 构建各类 Windows 应用和组件。
Windows 运行时基于内部的组件对象模型(Component Object Model,COM)API,需要通过诸如 C++/WinRT 和 Rust/WinRT 之类的语言投影进行访问。这些语言投影采用描述各种 API 的元数据,并为目标编程语言提供自然的绑定。这使开发人员可以使用所需的语言为 Windows 轻松构建应用程序和组件。
Rust/WinRT 由来自 Windows 团队的工程师 Kenny Kerr 于去年十一月提出,并开始进行尝试。他在当时的博客文章中表示,Windows 运行时已开始增加对各种语言的支持,但这些都无法脱离 C++,直到 Rust 的出现。
Kerr 认为,即便 Rust 的学习曲线可能令人望而却步,但它很有可能解决 C++ 与 WinRT 的关系中一些最棘手的问题。“想象一下不需要 IDL 的 C++/WinRT:更快的构建时间,以及简单而集成的构建系统。”
根据微软的介绍,Rust/WinRT 能够将任意时间段内的 WinRT API 直接调用进 Rust 包,开发者可以像调用 Rust 模块一样调用它们。
Rust 与 C++ 在编译和运行时模型等许多方面都非常类似,但 Rust 在安全性上更胜一筹,这也是微软一直强调和看重的地方。
官方的介绍文章中还给出了一些关于 Rust/WinRT 的有趣示例,例如这个从 C++/WinRT 快速移植到 Rust/WinRT 的扫雷游戏 demo:
目前 Rust/WinRT 还处于早期预览状态,微软希望它接下来与现有 Win32 和 COM API 提供更加无缝的互操作,包括对 com-rs crate 的支持。
详情可见微软官方博客:https://blogs.windows.com/windowsdeveloper/2020/04/30/rust-winrt-public-preview/