Rust 簡(jiǎn)介

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

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

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

Rust 適合哪些人

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

開發(fā)團(tuán)隊(duì)

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

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

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

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

學(xué)生

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

公司

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

開源開發(fā)者

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

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

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

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

本書適合哪些人

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

如何閱讀本書

本書推薦從頭到尾順序閱讀,因?yàn)榭亢蟮恼鹿?jié)需要前面章節(jié)的概念基礎(chǔ)。前面的章節(jié)可能不會(huì)深入介紹部分主題,而是留待后續(xù)章節(jié)重新討論。

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

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

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

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

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

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

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

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

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

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

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

學(xué)習(xí) Rust 的一個(gè)重點(diǎn)在于了解如何閱讀編譯器提供的錯(cuò)誤信息,它們會(huì)指導(dǎo)你編寫出能運(yùn)行的代碼。為此,我們會(huì)提供很多無法通過編譯的示例,并附上錯(cuò)誤信息。運(yùn)行示例代碼的時(shí)候務(wù)必閱讀上下文,看看這段代碼是否是故意寫錯(cuò)的,部分示例代碼就是無法編譯的!Ferris 也會(huì)幫助你分辨哪些代碼是故意寫錯(cuò)的:

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

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

源代碼

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)