用Rust for Windows构建更安全的软件

微软对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发布后,只需要重新构建和重新编译。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容