Rust程式語言入門

2020-09-12 架構與人生

由Steve Klabnik和Carol Nichols撰寫,由Rust社區提供

2018版的Rust語言包括許多改進,使Rust更符合人體工程學且更易於學習。本書的此迭代包含許多更改以反映這些改進:

  • 第7章「使用包,板條箱和模塊管理不斷增長的項目」已被大部分重寫。使2018版中的模塊系統和路徑工作方式更加一致。
  • 第10章新增了標題為「作為參數的特徵」和「返回實現特徵的類型」的部分,它們解釋了新impl Trait語法。
  • 第11章有一個名為「 Result<T, E>在測試中使用」的新部分,該部分顯示了如何編寫使用?運算符的測試。
  • 刪除了第19章中的「高級生存時間」部分,因為編譯器的改進使該部分中的構造更加罕見。
  • 先前的附錄D「宏」已擴展為包括過程宏,並移至第19章的「宏」部分。
  • 附錄A「關鍵字」還介紹了新的原始標識符功能,該功能使在2015版和2018版中編寫的代碼可以互操作。
  • 附錄D現在標題為「有用的開發工具」,涵蓋了最近發布的可幫助您編寫Rust代碼的工具。
  • 我們整本書中修復了一些小錯誤和措辭不準確的問題。謝謝那些舉報的讀者!

請注意,即使在更新所用的Rust編譯器版本時 ,所編譯的Rust程式語言的早期迭代中所有代碼也將繼續編譯,而無需edition=&34;在項目的Cargo.toml中。這就是Rust的向後兼容性保證!

HTML格式可從https://doc.rust-lang.org/stable/book/在線獲得, 而脫機使用rustup;可以使用安裝的Rust離線獲得。跑開rustup docs --book。

注意:這本書的版本與No Starch Press發行的印刷版和電子書格式的Rust程式語言相同。

歡迎使用Rust程式語言,這是一本有關Rust的入門書籍。Rust程式語言可幫助您編寫更快,更可靠的軟體。高級人機工程學和低級控制在程式語言設計中常常是矛盾的。銹病挑戰衝突。通過平衡強大的技術能力和出色的開發人員經驗,Rust為您提供了控制底層細節(例如內存使用)的選項,而無需傳統上與此類控制相關的所有麻煩。

誰生鏽

由於多種原因,Rust是許多人的理想選擇。讓我們看一些最重要的小組。

開發團隊

事實證明,Rust是用於在具有不同級別的系統編程知識的大型開發人員團隊之間進行協作的高效工具。低級代碼容易產生各種細微的錯誤,在大多數其他語言中,只有經過經驗豐富的開發人員進行廣泛的測試和仔細的代碼審查,才能發現這些錯誤。在Rust中,編譯器通過拒絕使用這些難以捉摸的錯誤(包括並發錯誤)來編譯代碼,從而起到了看門人的作用。通過與編譯器並肩工作,團隊可以將時間花在專注於程序的邏輯上,而不是尋找錯誤。

Rust還為系統編程界帶來了當代的開發人員工具:

  • Cargo是隨附的依賴項管理器和構建工具,使添加,編譯和管理依賴項在整個Rust生態系統中變得輕鬆而一致。
  • Rustfmt確保開發人員之間一致的編碼風格。
  • Rust語言伺服器支持集成開發環境(IDE)集成,以完成代碼和內嵌錯誤消息。

通過在Rust生態系統中使用這些工具和其他工具,開發人員可以在編寫系統級代碼時提高工作效率。

學生們

Rust適用於學生以及對學習系統概念感興趣的人。使用Rust,許多人已經了解了諸如作業系統開發之類的主題。社區非常歡迎並樂於回答學生的問題。通過本書這樣的努力,Rust團隊希望使更多人(尤其是編程新手)更容易使用系統概念。

公司介紹

數百家大小公司都在生產中使用Rust來完成各種任務。這些任務包括命令行工具,Web服務,DevOps工具,嵌入式設備,音頻和視頻分析和轉碼,加密貨幣,生物信息學,搜尋引擎,物聯網應用程式,機器學習,甚至是Firefox Web瀏覽器的主要部分。

開源開發人員

Rust適用於想要構建Rust程式語言,社區,開發人員工具和庫的人。我們希望您能為Rust語言做出貢獻。

重視速度和穩定性的人

Rust適用於渴望使用某種語言的速度和穩定性的人。速度是指您可以使用Rust創建的程序的速度,以及Rust允許您編寫程序的速度。Rust編譯器的檢查通過添加功能和重構來確保穩定性。這與沒有這些檢查的語言中易碎的舊代碼相反,開發人員通常不敢對其進行修改。通過努力實現零成本抽象,將高級功能編譯為低級代碼的速度與手動編寫的代碼一樣快,Rust努力使安全代碼也成為快速代碼。

Rust語言希望也能支持許多其他用戶。這裡提到的只是最大的利益相關者。總體而言,Rust的最大野心是通過提供安全性生產率,速度人體工程學來消除程式設計師數十年來接受的折衷方案。嘗試一下Rust,看看它的選擇是否對您有用。

內容誰來閱讀

本書假定您已經用另一種程式語言編寫了代碼,但是沒有對哪種程式語言做任何假設。我們已嘗試使各種編程背景的人員都可以廣泛使用該材料。我們不會花很多時間來談論什麼編程或如何去想它。如果您是編程的新手,那麼最好閱讀一本專門介紹編程的書,為您提供更好的服務。

如何使用這本書

通常,這本書假定您從前到後依次閱讀。後面的章節以前面的章節中的概念為基礎,而前面的章節可能不會深入研究某個主題。我們通常會在下一章中重新討論該主題。

在本書中,您會發現兩種章節:概念章節和項目章節。在概念章節中,您將學習Rust的一個方面。在項目章節中,我們將一起構建小型程序,並應用您到目前為止所學的知識。第2、12和20章是項目的章節;其餘的是概念章節。

第1章介紹了如何安裝Rust,以及如何編寫「 Hello,world!」。程序,以及如何使用Rust的軟體包管理器和構建工具Cargo。第2章是Rust語言的動手入門。在這裡,我們從較高的層次介紹概念,後面的章節將提供更多詳細信息。如果您想立即弄髒手,第二章就是解決這個問題的地方。起初,您甚至可能想跳過第3章,它涵蓋了Rust的功能,與其他程式語言類似,而直接進入第4章以了解Rust的所有權系統。但是,如果您是一位特別細緻的學習者,並且喜歡在繼續學習下一個細節之前先學習每一個細節,那麼您可能想跳過第2章,直接進入第3章,而當您想學習一個細節時又回到第2章。項目,應用您學到的細節。

第5章討論結構和方法,第6章討論枚舉,match 表達式和if let控制流結構。您將使用結構和枚舉在Rust中創建自定義類型。

在第7章中,您將了解Rust的模塊系統以及用於組織代碼及其公共應用程式編程接口(API)的隱私規則。第8章討論了標準庫提供的一些常見的集合數據結構,例如向量,字符串和哈希圖。第9章探討了Rust的錯誤處理哲學和技術。

第10章深入探討了泛型,特徵和生存期,使您可以定義適用於多種類型的代碼。第11章涉及測試,即使具有Rust的安全保證,也必須進行測試以確保程序邏輯正確。在第12章中,我們將grep從命令行工具構建自己的功能子集的實現,該命令行工具在文件中搜索文本。為此,我們將使用前面各章中討論的許多概念。

第13章探討了閉包和迭代器:Rust的功能,它們來自函數式程式語言。在第14章中,我們將更深入地研究Cargo,並討論與他人共享您的庫的最佳實踐。第15章討論了標準庫提供的智能指針以及支持其功能的特徵。

在第16章中,我們將介紹並發編程的不同模型,並討論Rust如何幫助您輕鬆地在多個線程中進行編程。第17章介紹了Rust習慣用法與您可能熟悉的面向對象編程原理的比較。

第18章是關於模式和模式匹配的參考,它們是在整個Rust程序中表達思想的有力方法。第19章包含了一系列有趣的高級主題,包括不安全的Rust,宏以及有關生存期,特徵,類型,函數和閉包的更多信息。

在第20章中,我們將完成一個項目,在該項目中我們將實現一個低級多線程Web伺服器!

最後,一些附錄以更像參考的格式包含有關該語言的有用信息。附錄A涵蓋了Rust的關鍵字,附錄B涵蓋了Rust的運算符和符號,附錄C涵蓋了標準庫提供的可派生特徵,附錄D涵蓋了一些有用的開發工具,附錄E解釋了Rust版本。

讀這本書沒有錯誤的方法:如果您想跳過,那就去吧!如果遇到任何困惑,您可能必須跳回到前面的章節。但是,盡一切可能為您工作。



學習Rust的過程的重要部分是學習如何讀取編譯器顯示的錯誤消息:這些將指導您使用有效的代碼。這樣,我們將提供許多未編譯的示例,以及編譯器將在每種情況下向您顯示的錯誤消息。要知道,如果您輸入並運行一個隨機示例,則該示例可能無法編譯!確保閱讀了周圍的文字,以查看您嘗試運行的示例是否有誤。Ferris還將幫助您區分不起作用的代碼:

相關焦點

  • rust程式語言Orphan Rule孤兒規則淺析
    rust編程rust語言集眾家之長rust不支持C++函數重載, 但是卻支持通過trait實現的運算符重載,有取有舍,當然trait的能力還遠不止如此,可以說trait融入rust各個角落,優雅實現各種語言約束和擴展。 本次呢,我來簡單分析一下rust語言的孤兒規則,體會一下其如何有效限制隨意擴展問題。
  • 都說Rust程式語言難學,那我們Ubuntu系統裡安裝下試試
    近日,程式語言Rust的官方在全球做了一個調查,然後發布了 2020 年 Rust 調查報告。這個又引發大家一陣對Rust的討論。這個曾經很小眾的程式語言,發布以後近些年越來越受開發者和企業的認可。在大型項目底層開發等領域C/C++「一統江湖」的年代,Rust能媲美這兩種底層的強大的語言,實力著實不可小覷。安全、性能、並發等特性的優勢,讓使用過的開發者都讚不絕口,眾口一詞給出肯定的態度。不過與之相應的是,Rust程式語言的學習難度。這個廣受好評的程式語言,其學習門檻之高也廣受大家「詬病」。的確,即便是比較資深的程式設計師,上手Rust都有一定的難度。
  • 一起學Rust編程「1」:開發環境
    引言Rust是近幾年獲得廣泛關注和認可的一門系統級程式語言。它嚴苛的靜態類型檢查和獨特的所有權系統,使得編譯器能夠儘可能的幫開發者在編譯時就排除一些符合常見模式的bug。這也讓很多人認為rust是一門更加「安全」的語言。
  • Rust 語言技巧和竅門
    Rust是一種全新系統程式語言,Rust語言立足於編譯時安全,由於沒有其他語言GC附帶,Rust也是一門高性能語言,性能堪比C。最近幾年內,Rust被開發人員廣為採納,是好多年年度最受歡迎語言和開發者最想學習的語言。Rust是最有前途可以替代C/C++的語言之一。
  • Rust 語言常用技巧匯集
    Rust是一種全新系統程式語言,Rust語言立足於編譯時安全,由於沒有其他語言GC附帶,Rust也是一門高性能語言,性能堪比C。最近幾年內,Rust被開發人員廣為採納,是好多年年度最受歡迎語言和開發者最想學習的語言。Rust是最有前途可以替代C/C++的語言之一。
  • Rust是最有前途的區塊鏈程式語言?
    文/灑脫喜區塊鏈世界的語言有很多種,包括但不限於Javascript、C#、 C++、 Python、 Golang、Solidity、 Java以及Rust,那麼究竟哪種語言的市場最大,以及哪種語言最具潛力呢?
  • Rust程式語言鍊表實現精粹之學習筆記
    rust後起之秀不要小看鍊表實現, 對於一般語言來說, 特別是像C/C++這種帶指針的語言來說非常容易, 然而對於rust獨特的語言設計來說並不容易,比如:所有權、生命周期、借用檢查、移動語義、讀寫鎖語義等等特色特性的限制, 所以rust語言實現鍊表還是要費些周折!
  • 程式語言的 IDE 支持
    或許是出自於對編寫程式語言的興趣,又或許是對於創建 IDE/編輯器的興趣,對於『IDE/編輯器是如何提供程式語言的支持』,我充滿了興趣。其中的一個主要原因是,這是每天我們打交道最多的工具,另外一個原因可能是,咦,我們怎麼沒有國產的 IDE(手動狗頭)。
  • 從 Rust 開始入門 WebAssembly | WebAssembly 教程
    Rust 是當今編寫 WebAssembly 應用程式的最佳語言。本文所用到的原始碼Repo請點擊:https://github.com/second-state/wasm-learning/tree/master/rust雖然 WebAssembly 支持多種程式語言,但迄今為止,
  • 電腦入門程式語言
    今天和大家介紹一下電腦入門編程學什麼語言更合適。首選python語言,python 是一門開源免費、通用型的腳本程式語言,現在社會上會python語言的人很吃香的。它上手簡單,功能強大,堅持「極簡主義」。
  • Rust的不足之處,讓它無法成為一門成熟的程式語言
    雖然我並不反對 Rust 本身,並且一直在用 Rust 開發自己的項目,但我還是發現它有一些不足之處,讓它無法成為一門成熟的程式語言。一門成熟的程式語言 (版本到了 1.0) 應該有正式的規範,對於開發編譯器的人和使用這門語言的程式設計師來說都應該有用。
  • 2020年6 月程式語言排行榜
    在上周 Stack Overflow 公布了 2020 開發者調查報告中,Rust 在開發者最喜愛的程式語言中排行榜首: 6 月份跟 5 月份比較沒有很大的變化,C 語言本月還是排在第一,R 語言從第 10 位上升到第 9 位,與 SQL 對調了位置。 少兒編程 Scratch 語言本月繼續上升了一位,少兒編程熱度不減。
  • 【Rust日報】2020-11-12 探索 Rust 編譯器的 PGO
    這篇文章恰好探討了這個問題,更多詳情請看:https://blog.rust-lang.org/inside-rust/2020/11/11/exploring-pgo-for-the-rust-compiler.html
  • 嵌入式為什麼選擇 Rust語言
    Embedded Rust適用於希望在使用高級概念和Rust語言提供的安全性的同時進行嵌入式編程的每個人。Rust用於在具有不同級別的系統編程知識的大型開發人員團隊之間進行協作的高效工具。Rust還為系統編程世界帶來了當代的開發人員工具:Cargo是隨附的依賴項管理器和構建工具,使添加,編譯和管理依賴項在整個Rust生態系統中變得輕鬆而一致。Rustfmt確保開發人員之間一致的編碼風格。Rust語言伺服器為集成開發環境(IDE)集成提供了強大的功能,以實現代碼完成和內聯錯誤消息。
  • rust語言trait特性綜述,老碼農愛學習愛技術愛分享
    rust語言學習Trait為rustrust中各種約束和限定主要由trait來表達,系統優雅嚴密,好比膠水,將泛型、並發、異步、內存管理等等諸多語言特性優雅地融合到一起,設計可謂精妙。", Bar + Foo);}泛型泛型不是個新概念了,各個主流變成語言都有支持, 具體形式也許有些差別, 但本質核心就是將類型參數化,編譯器編譯期間可以推導出具體類型, rust語言集眾家之長,自然也支持泛型, 但是他的特色在於和Trait融合到一起, 迸發出更加強大靈活嚴謹高效的抽象表達能力,可以充當定語
  • 初學者學習程式語言,把Python作為入門程式語言是否適合
    首先,對於初學編程的人來說,選擇何種程式語言取決於自己的行業發展規劃,因為程式語言與行業應用場景有非常緊密的聯繫,所以選擇進入不同的行業領域發展,往往需要選擇學習不同的程式語言。Python語言是一門比較流行的全場景程式語言,而且Python語言本身也比較簡單易學,所以選擇Python
  • 程式語言Swift快速入門視頻教程6:字典
    自蘋果於2014年WWDC(蘋果開發者大會)發布的新開發語言後,Swift程式語言的火熱趨勢就勢不可擋,不少企業開始開出高薪招聘Swift開發者,此時大家站在同一起跑線學習Swift語言是,可與Objective-C*共同運行於MAC OS和iOS平臺,用於搭建基於蘋果平臺的應用程式。
  • 程式語言Swift快速入門視頻教程5:數組
    自蘋果於2014年WWDC(蘋果開發者大會)發布的新開發語言後,Swift程式語言的火熱趨勢就勢不可擋,不少企業開始開出高薪招聘Swift開發者,此時大家站在同一起跑線學習Swift語言是,可與Objective-C*共同運行於MAC OS和iOS平臺,用於搭建基於蘋果平臺的應用程式。
  • 為什麼不用Rust?
    不是所有的開發都是系統編程Rust 是一種系統程式語言。它提供了對數據布局和代碼運行時行為的精確控制,賦予你最大的性能和靈活性。與其他系統程式語言不同的是,它還提供了內存安全--有bug的程序會以一種明確定義的方式終止,而不是出現(潛在的安全威脅)未定義的行為。然而,在大多數情況下,人們並不需要終極性能或對硬體資源的極致控制。
  • 程式語言Swift入門視頻教程:常量和變量
    蘋果公司在今年的WWDC大會上發布了全新程式語言Swift,Swift語言的發布對於開發者們,尤其是iOS開發者們來說確實是蘋果開發者大會的一大亮點。我們可以預想到未來的iOS開發招聘信息很可能會變成「招聘iOS程式設計師,要求擁有5年的Swift語言開發經驗」。