Rust 簡介

2023-02-17 11:03 更新
ch00-00-introduction.md
commit d036f7f049fb4884f63993901ff14d674c8dfb09

注意:此書的英文原版與 No Starch Press 出版的紙質(zhì)版和電子版《The Rust Programming Language》一致。

歡迎閱讀《Rust 程序設計語言》,這是一本 Rust 語言的入門書。Rust 程序設計語言能幫助你編寫更快、更可靠的軟件。在編程語言設計中,上層的編程效率和底層的細粒度控制往往不能兼得,而 Rust 則試圖挑戰(zhàn)這一矛盾。Rust 通過平衡技術(shù)能力和開發(fā)體驗,允許你控制內(nèi)存使用等底層細節(jié),同時也不需要擔心底層控制帶來的各種麻煩。

Rust 適合哪些人

Rust 適合很多開發(fā)者,其原因多種多樣。下面討論幾個最重要的群體。

開發(fā)團隊

實踐證明,對于大規(guī)模的開發(fā)團隊,即使成員的系統(tǒng)編程水平不同,Rust 仍是高效的協(xié)作工具。底層代碼中容易出現(xiàn)很多不易察覺的 bug。在其他編程語言中想要找到它們,只能設計大量的測試,并且讓經(jīng)驗豐富的開發(fā)者細心審核代碼。在 Rust 中,編譯器充當了守門員的角色。如果代碼中存在這些難找的 bug,比如并發(fā)的 bug,它會拒絕編譯。只要與編譯器協(xié)同工作,團隊就可以花更多的時間聚焦在程序邏輯上,無需費心找 bug。

Rust 也為系統(tǒng)編程世界帶來了現(xiàn)代化的開發(fā)工具:

  • Cargo 是內(nèi)置的依賴管理器和構(gòu)建工具,它能輕松增加、編譯和管理依賴,并使依賴在 Rust 生態(tài)系統(tǒng)中保持一致。
  • Rustfmt 確保開發(fā)者遵循一致的代碼風格。
  • Rust Language Server 為集成開發(fā)環(huán)境(IDE)提供了強大的代碼補全和內(nèi)聯(lián)錯誤信息功能。

通過使用 Rust 生態(tài)系統(tǒng)中豐富的工具,開發(fā)者可以更高效地編寫系統(tǒng)層面代碼。

學生

Rust 適合學生群體,也適合有興趣學習系統(tǒng)概念的人。很多人利用 Rust 學習了操作系統(tǒng)開發(fā)等內(nèi)容。Rust 社區(qū)歡迎學生提問,也樂于解答問題。Rust 團隊希望系統(tǒng)概念能讓更多人了解,尤其是編程新手,為此編寫了這本書以及其他內(nèi)容。

公司

大大小小的公司都已在生產(chǎn)中使用 Rust 來完成各種任務,包括命令行工具、網(wǎng)絡服務、DevOps 工具、嵌入式設備、音視頻分析與轉(zhuǎn)碼、加密貨幣、生物信息學、搜索引擎、物聯(lián)網(wǎng)(IOT)程序、機器學習等,甚至 Firefox 瀏覽器的主要部分也是用 Rust 編寫的。

開源開發(fā)者

Rust 適合那些希望構(gòu)建 Rust 編程語言、社區(qū)、開發(fā)工具和庫的開發(fā)者。我們歡迎你為 Rust 語言貢獻力量。

重視速度和穩(wěn)定性的開發(fā)者

Rust 適合追求編程語言的速度與穩(wěn)定性的開發(fā)者。使用 Rust,不僅寫出來的程序運行速度快,寫代碼的速度也快。Rust 編譯器會檢查代碼,確保增加功能、重構(gòu)代碼時的穩(wěn)定性。與之相比,其他的一些語言沒有檢查功能,導致開發(fā)者往往不敢修改脆弱的祖?zhèn)鞔a。Rust 力求將高級語言特性編譯成底層代碼,并且與手寫的代碼運行速度同樣快,這一概念稱為零開銷抽象(zero-cost abstractions),可以讓代碼又安全又快速。

這里提到的只是較大的幾個受益群體,Rust 語言也希望能支持更多其他用戶??傊?,Rust 最重要的目標是消除數(shù)十年來程序員習以為常的取舍,讓安全和高效、速度和易讀易用可以兼得。試試看 Rust,說不定它的選擇就適合你。

本書適合哪些人

本書假設你已經(jīng)有其他編程語言的經(jīng)驗,任何語言均可,我們盡可能讓各種語言背景的人都能讀懂。本書的重點不是程序設計本身,也不是程序設計思維。如果你完全沒學過編程,建議你先閱讀專門介紹程序設計的書籍。

如何閱讀本書

本書推薦從頭到尾順序閱讀,因為靠后的章節(jié)需要前面章節(jié)的概念基礎。前面的章節(jié)可能不會深入介紹部分主題,而是留待后續(xù)章節(jié)重新討論。

本書分為兩類章節(jié):概念章節(jié)和項目章節(jié)。在概念章節(jié)中,我們學習 Rust 的某個方面。在項目章節(jié)中,我們應用目前所學的知識一同構(gòu)建小型程序。第 2、12、20 章是項目章節(jié);其余都是概念章節(jié)。

第 1 章介紹如何安裝 Rust,如何編寫 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和構(gòu)建工具 Cargo。第 2 章是 Rust 語言的實戰(zhàn)介紹。我們會站在較高的層次介紹一些概念,而將詳細的介紹放在稍后的章節(jié)中。如果你希望立刻就動手實踐一下,第 2 章正好適合你。第 3 章介紹 Rust 中類似其他編程語言的特性,你可以選擇跳過,直接閱讀第 4 章學習 Rust 的所有權(quán)(ownership)系統(tǒng)。不過,如果你注重細節(jié),可以跳過第 2 章直接看第 3 章,之后想要寫項目的時候再回來看第 2 章。

第 5 章討論結(jié)構(gòu)體(struct)和方法,第 6 章介紹枚舉(enum)、?match ?表達式和 ?if let? 控制流結(jié)構(gòu)。在 Rust 中,創(chuàng)建自定義類型需要用到結(jié)構(gòu)體和枚舉。

第 7 章介紹 Rust 的模塊(module)系統(tǒng),其中的私有性規(guī)則用來組織代碼和公開的 API(應用程序接口)。第 8 章討論標準庫提供的常見集合數(shù)據(jù)結(jié)構(gòu),例如 Vector(向量)、字符串和 Hash Map(散列表)。第 9 章探索 Rust 的錯誤處理技術(shù)和理念。

第 10 章深入介紹泛型(generic)、Trait 和生命周期(lifetime),用這些特性可以寫出適用多種類型的代碼。第 11 章介紹測試,因為就算 Rust 有安全保證,也需要測試確保程序邏輯正確。?grep ?命令可以查找文件中的文本,第 12 章中我們將會構(gòu)建一個命令行工具實現(xiàn)它的部分功能,為此會用到之前章節(jié)討論的很多概念。

第 13 章探索閉包(closure)和迭代器(iterator),這兩個特性來自函數(shù)式編程語言。第 14 章會深入探討 Cargo 并介紹分享代碼庫的最佳實踐。第 15 章討論標準庫提供的智能指針以及相關(guān)的 Trait。

第 16 章介紹幾類并發(fā)編程模型,并討論 Rust 如何助你無畏地編寫多線程程序。第 17 章著眼于比較 Rust 風格與 OOP(面向?qū)ο缶幊蹋┰瓌t。

第 18 章介紹模式和模式匹配,它是在 Rust 程序中表達思想的有效方式。第 19 章是一個高級主題大雜燴,包括不安全 Rust(unsafe Rust)、宏(macro)和更多關(guān)于生命周期、Trait、類型、函數(shù)和閉包的內(nèi)容。

第 20 章我們將會完成一個項目,實現(xiàn)一個底層的、多線程的網(wǎng)絡服務器!

最后的附錄包含一些實用信息,格式類似參考文檔。附錄 A 介紹 Rust 的關(guān)鍵字,附錄 B 介紹 Rust 的運算符和符號,附錄 C 介紹標準庫提供的可派生 Trait,附錄 D 涉及一些有用的開發(fā)工具,附錄 E 介紹 Rust 的不同版本。

本書沒有錯誤的閱讀方式,可以盡管跳過部分內(nèi)容,遇到困惑時再回看前面的章節(jié)。

學習 Rust 的一個重點在于了解如何閱讀編譯器提供的錯誤信息,它們會指導你編寫出能運行的代碼。為此,我們會提供很多無法通過編譯的示例,并附上錯誤信息。運行示例代碼的時候務必閱讀上下文,看看這段代碼是否是故意寫錯的,部分示例代碼就是無法編譯的!Ferris 也會幫助你分辨哪些代碼是故意寫錯的:

Ferris 含義
Ferris 頭上有問號 這段代碼無法通過編譯!
Ferris 舉起兩只鉗子 這段代碼會 Panic!
Ferris 舉起一只鉗子并聳肩 這段代碼的運行結(jié)果不符合預期。

在大部分情況,我們會指導你將無法通過編譯的代碼修改為正確版本。

源代碼

生成本書的源碼可以在 GitHub 上找到。

譯者注:本譯本的也有 GitHub 倉庫,歡迎提交 Issue 和 PR :)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號