用Rust for Windows構(gòu)建更安全的軟件
譯文【51CTO.com快譯】微軟對Rust感興趣有一段時日了,研究其在系統(tǒng)編程任務中作為一種替代C和C ++的類型安全和內(nèi)存安全語言。隨著越來越多的微軟業(yè)務依賴云服務,Rust等工具對于構(gòu)建那些服務、提高可靠性和安全性將至關重要。
系統(tǒng)編程工具根源于操作系統(tǒng)開發(fā),您需要在代碼和硬件之間有很少的東西,而與運行時環(huán)境和垃圾回收有關的開銷增加了不必要的延遲。這些特性不僅適用于操作系統(tǒng),對于構(gòu)建任何可靠的應用程序都很重要:您希望代碼安全運行,不會導致內(nèi)存泄漏,而且攻擊者很難脫離代碼在系統(tǒng)內(nèi)存中的自有部分。
通過用Rust來構(gòu)建,您可以使代碼更安全。這是第一道防線,內(nèi)置在用于構(gòu)建代碼的語言和工具中。也許您正在構(gòu)建驅(qū)動程序或者銀行軟件,重要的是您的代碼要值得信賴,您還需要管理風險。因此,在您可能使用JavaScript的地方,可以使用在WebAssembly中運行的Rust,在您使用C或C ++的地方,可以使用Windows或Linux版本。
微軟、Rust和Windows
微軟對Rust的承諾體現(xiàn)在它是Rust基金會的創(chuàng)始成員,以及近幾個月眾多語言和工具開發(fā)人員加入了微軟。微軟現(xiàn)在宣布了自己的一套工具,用于使用Rust構(gòu)建和開發(fā)Windows代碼,這些工具基于讓它得以交付C ++ / WinRT API投射的同樣的Windows功能。
Rust for Windows的核心是支持Windows API元數(shù)據(jù)動態(tài)生成API代碼的Rust crate。您將需要開發(fā)環(huán)境中的C ++構(gòu)建工具,或使用Visual Studio Code中的獨立工具,或使用完整安裝的Visual Studio。這確實意味著它不是免費軟件:您需要Visual Studio許可證才能使用C ++工具。(如果您在構(gòu)建開源項目或者是個人開發(fā)者,可以使用免費的社區(qū)版。)
可以從Rust網(wǎng)站下載32位和64位版本的Rust for Windows編譯器。rustup工具為您的開發(fā)系統(tǒng)下載所有適當?shù)慕M件,一個簡單的命令行工具幫助定制安裝。如果您使用Code,還要安裝另外幾個擴展程序:添加Rust語言服務器以用于IntelliSense代碼高亮顯示和提示的rust-analyzer,以及用于調(diào)試的CodeLLDB或微軟的C/C ++擴展。一旦安裝到位,您可以開始使用Rust for Windows了。
走近Rust for Windows crate
對Windows開發(fā)人員而言最重要的工具之一是它支持語言投射。這項技術(shù)讓開發(fā)工具可以從Windows為其SDK提供的元數(shù)據(jù)來生成針對特定語言的API。有了語言投射支持,微軟無需為每種受支持的語言編寫API,增添了越來越多的Windows SDK的復雜性,并使每種受支持的語言更難與Windows保持同步。
該技術(shù)確保Rust要獲得Windows支持,只需要適當?shù)恼Z言投射,然后根據(jù)需要自動生成API。微軟無需為受支持的語言提供SDK,任何新語言只需要自己的語言投射,即可獲得Windows的支持。這種開發(fā)任務的復雜性低得多;隨著新的Windows API發(fā)布(比如在Project Reunion中),API團隊只需要元數(shù)據(jù)定義。
您可以使用Visual Studio和Visual Studio Code中的Rust工具,編寫可在任何地方運行的Rust模塊,但是如果您打算將其用于Windows開發(fā),需要安裝Rust for Windows工具才能訪問Windows API。微軟的Rust服務是GitHub上的一個開源項目。當前版本以Rust crate的形式出現(xiàn),可以從Rust crate代碼庫來安裝。
使用Rust for Windows
Windows Rust crate使用標準Rust功能,從Rust的Cargo作為一個軟件包來安裝。安裝后,您可以使用Rust的構(gòu)建工具為要在項目中使用的Windows API創(chuàng)建適當?shù)慕壎ā_@種方法僅為您要使用的API提供代碼。你可以在添加API時添加新的綁定,刪除不需要支持的任何綁定。僅在需要時提供API支持為您的代碼增添了額外的安全性。它無法調(diào)用不受支持的API,盡量減小了任何攻擊面。
Windows上的Rust開發(fā)仍在開發(fā)中,因此您有時需要跳出平常的開發(fā)環(huán)境。需要使用命令行從Cargo創(chuàng)建新項目。一旦您創(chuàng)建了項目,創(chuàng)建一個綁定crate以托管Rust for Windows API。這是在您項目的cargo.toml文件中創(chuàng)建的,為Windows crate添加依賴項。這將會安裝適合您代碼的版本。需要手動更新新版本的版本號(當前版本號為0.8.0)。
Rust for Windows如何生成API綁定方面有意思的地方在于,您可以專注于想要使用的API命名空間部分。一旦選擇了命名空間,將其添加到綁定文件夾中的build.rs文件。微軟提供了一個宏來創(chuàng)建API綁定,使用它會自動創(chuàng)建所需的任何依賴項,而許多關鍵的API內(nèi)置在Windows crate中,無需為Windows.Foundation之類的標準API構(gòu)建綁定就可以使用。Windows API的說明文檔可幫助您入門。
然后,您可以在代碼中添加指向綁定文件的鏈接,可以隨時開始使用它們。這個過程的真正重要之處在于,您可以混合搭配所使用的API,在同一應用程序中使用用于GPU計算的Direct3D和用于UI的XAML工具。它還為新的API做好了準備,一旦新API發(fā)布即可利用它們的元數(shù)據(jù)。隨著微軟通過將Windows SDK與Windows發(fā)布周期相脫離以加快API開發(fā),這種方法會越來越重要。
結(jié)果是可以用Rust構(gòu)建完整的Windows應用程序,這種方法靈活而強大。通過使用Rust for Windows來處理API調(diào)用,您的代碼將更安全,并為Windows API將來的變化做好了準備,新的和更新后的API發(fā)布后,只需要重新構(gòu)建和重新編譯。
原文標題:Build more secure software with Rust for Windows,作者:Simon Bisson
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】















 
 
 






 
 
 
 