Rust/WinRT公共预览

2020-05-02 18:05:19

我们很兴奋地宣布,Rust/WinRT项目终于在GitHub上有了一个永久的公共主页:

Rust/WinRT遵循C++/WinRT建立的使用标准语言和编译器为Windows运行时构建语言投影的传统,为Rust开发人员提供了一种自然而惯用的方式来调用Windows API。Rust/WinRT允许您使用从描述API的元数据直接动态生成的代码调用任何过去、现在和将来的WinRT API,并直接进入Rust包,在那里您可以像调用另一个Rust模块一样调用它们。

Windows运行时基于幕后的组件对象模型(COM)API,并设计为通过C++/WinRT和Rust/WinRT等语言投影进行访问。这些语言投影获取描述各种API的元数据,并为目标编程语言提供自然绑定。正如您可以想象的那样,这使得开发人员可以更轻松地使用他们想要的语言为Windows构建应用程序和组件。然后,您可以使用这些Windows API来构建桌面应用程序、存储.。

微软长期以来一直依赖C++作为我们很多工作的主干,但它面临着一些挑战,特别是在安全性方面。如果您遵循某些谨慎的约定,现代C++肯定会使编写安全可靠的C++变得更容易,但这通常很难在较大的项目中实施。铁锈是一种耐人寻味的语言。它在许多方面与C++非常相似,在编译、运行时模型、类型系统和确定性终结方面都恰到好处。..。

下面是Rust调用Windows API的一个简单示例。API本身并不重要,但它应该能让您了解从Rust代码调用WindowsAPI的自然程度。在下面的示例中,我们使用Windows.Data.Xml.Dom命名空间中的XmlDocument类来分析和检查一个简单的XML文档:

如果您熟悉Rust,您会注意到它看起来更像Rust,而不是C++或C#。请注意模块和方法名称上的Snake_Case以及?用于错误传播的运算符。

下面是使用Windows.ApplicationModel.DataTransfer命名空间将一些值复制到剪贴板的另一个示例:

作为一个更完整的例子,我鼓励您看看Robert Mikhayelyan的扫雷演示。Robert最初使用C++/WinRT编写了这款经典游戏的一个版本,并能够快速将其移植到使用Rust/WinRT。https://github.com/robmikh/minesweeper-rs。

这是一个非常早的公开预览,但我们已经决定从现在开始公开工作。所以请试一试,让我们知道你的想法。我们希望在继续开发Rust/WinRT时得到反馈,并计划最终在crates.io上发布。我们还希望提供与现有Win32和COM API更无缝的互操作,包括对COM-rs crate的支持,后者目前支持COM API。https://github.com/microsoft/winrt-rs