Categories
程式開發

Rust/WinRT预览版发布,微软在Rust大道上又进了一步


Rust/WinRT是Windows运行时的一种语言映射,现在发布了预览版,可以通过自然惯用的方式来调用Windows API,类似于C++/WinRT等其他语言映射。

借助Rust/WinRT,你可以直接使用由API元数据生成的动态代码来调用WinRT API,不管是过去的、现在的还是未来的,并可以直接调用Rust包,就好像调用另一个Rust模块一样。

微软首席软件工程师Kenny Kerr解释说,Rust开发人员可以使用Rust/WinRT开发Windows应用程序和组件,以及NT服务或Windows驱动程序。下面演示了如何使用XmlDocument类来解析XML文档:

use windows::data::xml::dom::*;
let doc = XmlDocument::new()?;
doc.load_xml("hello world")?;
let root = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "hello world");

微软努力让Rust/WinRT代码尽可能看起来接近惯用的Rust代码,比如,蛇形命名到驼峰命名的自动转换、对Rust null合并操作符?的支持、简化错误传递,等等。

根据InfoQ之前的报道,一段时间以来,微软一直在探索将Rust作为开发安全软件的解决方案。微软工程师Ryan Levick和Sebastian Fernandez在上一界巴塞罗那RustFest大会上解释说,微软期望Rust能够让高性能关键组件的开发变得更安全,尽管Rust社区仍然需要克服很多困难才能让Rust及其工具链为Windows提供一等支持。

这个新项目似乎证实了微软对待在开发中使用Rust这件事是认真的:

长期以来,微软一直将C++作为开发的基础,但也面临着一些挑战,尤其是在安全方面。Rust是一种有趣的编程语言,它在很多方面与C++非常相似,在编译、运行时模型、类型系统和确定性终止机制方面都做得很好。它有自己独特的学习曲线,不过它可以解决困扰C++项目的一些最令人头疼的问题,而且它的设计从一开始就是以内存安全和安全并发作为核心原则。

要在项目中使用Rust/WinRT,可以在Cargo.toml文件添加依赖:

[dependencies]
winrt = { git = "https://github.com/microsoft/winrt-rs" }

这样就可以导入任意Windows模块:

use winrt::*;
import!(
    dependencies
        os
    modules
        "windows.data.xml.dom"
        "windows.foundation"
        "windows.ui"
);

Rust/WinRT现在只提供了早期预览版,虽然已经足够成熟了。Robert Mikhayelyan的Rust扫雷游戏提供了非常好的示例。

原文链接

Rust/WinRT Brings Microsoft Closer to Adopting Rust Internally