天天看點

rust程式設計_在Windows程式設計中開始使用Rust

rust程式設計

Microsoft可以從使用C,C ++和C#切換到其他語言嗎? 微軟安全響應中心(MSRC) 最近的一篇部落格文章表明,它很可能正在尋找替代方法,目的是降低其代碼的風險。 正如MSRC的首席安全工程經理Gavin Thomas指出的那樣,向MSRC報告的Microsoft代碼中的錯誤的主要原因之一是記憶體損壞,使記憶體被覆寫或通路應受保護的記憶體的錯誤。

保持記憶安全

長期以來,記憶體安全一直是一個重要的問題,但是MSRC所做的統計工作表明這一問題并沒有消失。 從Microsoft自己的“安全開發生命周期”到使用更新的記憶體安全語言(例如C#),您都有許多工具可以幫助編寫安全代碼。 但是這些方法都需要權衡:與C ++相比,它們産生的代碼速度較慢,并且可以在更進階别上工作。

[ 什麼是Rust? 安全,快速,輕松地進行軟體開發的方式 。 | 下一頁:在InfoWorld教程中了解如何開始使用Rust 。 | 通過InfoWorld的App Dev Report新聞通訊了解程式設計方面的熱門話題。 ]

對于面向客戶的代碼,這不是問題。 C ++開發的使用者體驗與C#内置的使用者體驗之間沒有感覺上的差別。 但是在系統級别上,用于建構作業系統和裝置驅動程式的代碼卻有很大的不同。 當您在系統級别上工作時,處理器周期很重要,正如Thomas在他的部落格文章中指出的那樣,像C ++和C這樣不受保護的語言實際上是曆史上在該級别上唯一可用的工具。

顯然,進階語言使用的記憶體安全方法不适用于系統級。 困擾微軟失敗的Longhorn項目的許多問題是由于試圖在.NET平台上建構整個作業系統而引起的。 那麼我們如何才能将記憶體安全性納入系統開發的基礎呢?

引入Rust

答案來自新一代的系統程式設計語言,例如Go和Rust ,這些語言具有C和C ++速度的.Net記憶體安全設計。 微軟已經在Azure中廣泛使用Go,因為它是Kubernetes編寫的語言。但是,這些方法尚未進入Windows,因為C ++仍然是系統程式設計之王。

在他的部落格文章中,Thomas提出了将Mozilla的Rust用作Windows的安全系統語言的觀點。 這是一個有趣的建議,并且已經得到了一個重要的證明:語言設計師Mozilla已經在最新的Web浏覽器版本中使用了它,它在Mozilla的目前和下一代渲染引擎中提供了支援。 其他主要的Rust使用者包括JavaScript子產品存儲庫NPM,Dropbox和Oracle。 甚至Microsoft也已經在使用它,并且在其某些Azure IoT Edge工具中使用了Rust代碼。

設定Windows Rust開發環境

開始進行Rust開發的明顯地方是Visual Studio Code 。 在其擴充市場中,您可以找到幾個安裝了Rust語言伺服器的擴充,這些擴充具有完整的語言支援以及用于從Visual Studio Code建構Rust應用的工具。 我一直在使用Rust語言團隊的官方Rust擴充 。 其他工具提供了對用于啟動開發的代碼段的支援,以及其他調試和測試工具。 甚至還有用于為您的代碼建構文檔的工具。 值得在您的Visual Studio Code Ruse環境中安裝Rust擴充包 ,因為這會添加其他工具來使用Rust自己的開發工具。

首先,您需要安裝Rust編譯器和Cargo軟體包管理器 。 Rust的官方安裝站點将檢測您使用的Windows版本并提供适當的下載下傳。 如果您将WSL用作Unix開發工具鍊的一部分,則甚至還包含在Linux的Windows子系統(WSL)上安裝Rust的說明。 運作Rustup安裝程式将下載下傳語言元件并設定Windows PATH 。 您可以選擇自定義安裝,但實際上最好接受預設設定。

了解Rust和記憶體安全

如果您編寫了C或C ++,則向Rust的過渡相對容易。 兩種語言之間有很多相似之處,盡管Rust的所有權概念使其具有記憶體安全性。 所有權使Rust可以管理變量的範圍,進而使它們僅在範圍内才有效。 如果不使用它們,則它們不在記憶體中。 一些變量是文字,不可變的值被寫死到您的代碼中。 但是更複雜的變量類型可以在設定時請求記憶體,在其他許多語言中,該過程要求您顯式配置設定記憶體,然後在不再需要變量或對象時釋放記憶體。 Rust将其自動化,将記憶體使用作為其範圍管理的一部分進行處理。

建立Rust的Mozilla團隊對記憶體安全以及在安全環境中可能發生的取舍進行了深思。 結果是一種既安全又快速的語言,它具有管理記憶體堆棧和堆的工具。 給一個函數指派會改變其所有權,将其從一個範圍移到另一個範圍。 類似的過程管理從函數調用傳回的值。

所有權是一個複雜的概念,但它是一個重要的概念。 它可以保護記憶體,并且即使擁有變量的引用,也隻允許擁有值的函數對其進行更改。 由于Rust将引用視為借用變量,是以除非您聲明可變變量,否則嘗試對其進行修改隻會産生錯誤。

Windows中Rust的未來

重要的是要記住,Rust仍然是一門年輕的語言,并且您在Windows開發中理所當然的許多功能都不存在。 沒有與Win32或其他核心Windows SDK的直接內建,如果不安裝其他庫,您将找不到對Windows GUI工具的任何支援。 但是,這并不是您可能想到的問題:Rust和Go一樣,是一種系統程式設計語言。 這是一個低級工具,快速又安全。 這使得它非常适合建構用于處理資料,處理數字和處理數組的代碼。 不要使用正在處理大量記憶體的C ++例程,而應使用Rust,以減少與記憶體損壞相關的風險。

如果确實要在Rust中開發GUI應用程式,則可以選擇使用多個UI庫之一。 也許最容易使用的是Kiss-ui ,它支援Windows和Linux GUI開發,并具有Win32 API通路權限以及對跨平台GTK的支援。 其他庫添加了更深入的Win32 API支援。

即使微軟最終沒有直接支援Rust,也有很多社群支援。 雖然組裝完整的工具鍊可能仍然是選擇所需的各種元素并使用Rustup之類的工具來安裝它們的問題,但Visual Studio Code擴充和擴充包的到來似乎可以簡化此過程。 定期更新表明,這是一個非常實時的項目,Rust團隊和許多第三方貢獻者正在為此工作。

使用記憶體安全語言的基本原理是一項重要的原則,并且很高興看到MSRC的專家解決這個問題。 在正式釋出記憶體安全的低級系統程式設計語言之前,一定要給Rust一次以上的經驗。 如果Microsoft确實選擇了它,那麼您将領先于遊戲。

在Windows之外,Rust是WebAssembly開發的關鍵語言,應在即将推出的Chromium驅動的Edge版本中幫助傳遞功能更強大的Web應用程式,這也是仔細研究它的另一個原因。

翻譯自: https://www.infoworld.com/article/3410796/get-started-with-rust-in-windows-programming.html

rust程式設計