微软推出了基于 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 的支持。
详情可见微软官方博客:
试用申请