微软对Rust感兴趣有一段时日了,研究其在系统编程任务中作为一种替代C和C ++的类型安全和内存安全语言。随着越来越多的微软业务依赖云服务,Rust等工具对于构建那些服务、提高可靠性和安全性将至关重要。
系统编程工具根源于操作系统开发,您需要在代码和硬件之间有很少的东西,而与运行时环境和垃圾回收有关的开销增加了不必要的延迟。这些特性不仅适用于操作系统,对于构建任何可靠的应用程序都很重要:您希望代码安全运行,不会导致内存泄漏,而且攻击者很难脱离代码在系统内存中的自有部分。
通过用Rust来构建,您可以使代码更安全。这是第一道防线,内置在用于构建代码的语言和工具中。也许您正在构建驱动程序或者银行软件,重要的是您的代码要值得信赖,您还需要管理风险。因此,在您可能使用JavaScript的地方,可以使用在WebAssembly中运行的Rust,在您使用C或C ++的地方,可以使用Windows或Linux版本。
微软、Rust和Windows
微软对Rust的承诺体现在它是Rust基金会的创始成员,以及近几个月众多语言和工具开发人员加入了微软。微软现在宣布了自己的一套工具,用于使用Rust构建和开发Windows代码,这些工具基于让它得以交付C ++ / WinRT API投射的同样的Windows功能。
Rust for Windows的核心是支持Windows API元数据动态生成API代码的Rust crate。您将需要开发环境中的C ++构建工具,或使用Visual Studio Code中的独立工具,或使用完整安装的Visual Studio。这确实意味着它不是免费软件:您需要Visual Studio许可证才能使用C ++工具。(如果您在构建开源项目或者是个人开发者,可以使用免费的社区版。)
可以从Rust网站下载32位和64位版本的Rust for Windows编译器。rustup工具为您的开发系统下载所有适当的组件,一个简单的命令行工具帮助定制安装。如果您使用Code,还要安装另外几个扩展程序:添加Rust语言服务器以用于IntelliSense代码高亮显示和提示的rust-analyzer,以及用于调试的CodeLLDB或微软的C/C ++扩展。一旦安装到位,您可以开始使用Rust for Windows了。
走近Rust for Windows crate
对Windows开发人员而言最重要的工具之一是它支持语言投射。这项技术让开发工具可以从Windows为其SDK提供的元数据来生成针对特定语言的API。有了语言投射支持,微软无需为每种受支持的语言编写API,增添了越来越多的Windows SDK的复杂性,并使每种受支持的语言更难与Windows保持同步。
该技术确保Rust要获得Windows支持,只需要适当的语言投射,然后根据需要自动生成API。微软无需为受支持的语言提供SDK,任何新语言只需要自己的语言投射,即可获得Windows的支持。这种开发任务的复杂性低得多;随着新的Windows API发布(比如在Project Reunion中),API团队只需要元数据定义。
您可以使用Visual Studio和Visual Studio Code中的Rust工具,编写可在任何地方运行的Rust模块,但是如果您打算将其用于Windows开发,需要安装Rust for Windows工具才能访问Windows API。微软的Rust服务是GitHub上的一个开源项目。当前版本以Rust crate的形式出现,可以从Rust crate代码库来安装。
使用Rust for Windows
Windows Rust crate使用标准Rust功能,从Rust的Cargo作为一个软件包来安装。安装后,您可以使用Rust的构建工具为要在项目中使用的Windows API创建适当的绑定。这种方法仅为您要使用的API提供代码。你可以在添加API时添加新的绑定,删除不需要支持的任何绑定。仅在需要时提供API支持为您的代码增添了额外的安全性。它无法调用不受支持的API,尽量减小了任何攻击面。
Windows上的Rust开发仍在开发中,因此您有时需要跳出平常的开发环境。需要使用命令行从Cargo创建新项目。一旦您创建了项目,创建一个绑定crate以托管Rust for Windows API。这是在您项目的cargo.toml文件中创建的,为Windows crate添加依赖项。这将会安装适合您代码的版本。需要手动更新新版本的版本号(当前版本号为0.8.0)。
Rust for Windows如何生成API绑定方面有意思的地方在于,您可以专注于想要使用的API命名空间部分。一旦选择了命名空间,将其添加到绑定文件夹中的build.rs文件。微软提供了一个宏来创建API绑定,使用它会自动创建所需的任何依赖项,而许多关键的API内置在Windows crate中,无需为Windows.Foundation之类的标准API构建绑定就可以使用。Windows API的说明文档可帮助您入门。
然后,您可以在代码中添加指向绑定文件的链接,可以随时开始使用它们。这个过程的真正重要之处在于,您可以混合搭配所使用的API,在同一应用程序中使用用于GPU计算的Direct3D和用于UI的XAML工具。它还为新的API做好了准备,一旦新API发布即可利用它们的元数据。随着微软通过将Windows SDK与Windows发布周期相脱离以加快API开发,这种方法会越来越重要。
结果是可以用Rust构建完整的Windows应用程序,这种方法灵活而强大。通过使用Rust for Windows来处理API调用,您的代码将更安全,并为Windows API将来的变化做好了准备,新的和更新后的API发布后,只需要重新构建和重新编译。