本書涵蓋了不同境環(huán)和體系架構(gòu)設(shè)計下配置Rust的技巧,并提供了解決實際問題的方案。首先介紹了Rust的核心概念,使讀者能創(chuàng)建高效、高性能的應(yīng)用,其中會使用各種Rust特性,如零成本抽象和改進內(nèi)存管理。本書還介紹了更高級的主題(包括通道和actor),能構(gòu)建可伸縮的生產(chǎn)級別的應(yīng)用,還會學習錯誤處理、宏和模塊化來編寫可維護的代碼。
前言
許多年前,就像很多程序員一樣,我開始每年學習一種新的編程語言。通過學習另一個編程語言,可以了解很多范式和規(guī)則,并得到一些想法,然后我發(fā)現(xiàn)了Rust。一開始寫Rust代碼就非常有趣,讓人無法挪步,而且經(jīng)過一個陡峭的學習曲線后,它變得越發(fā)有趣。所以,總共學習了兩個額外的語言后(TypeScript和Rust),我堅定地選擇了Rust。為什么? 下面來告訴你原因。
Rust是一個系統(tǒng)編程語言,會默認地提供內(nèi)存安全性而無需垃圾回收器,這會影響其運行時行為。盡管如此,Rust是一個相當全能的語言,可以在不同領(lǐng)域中使用,不論是Web編程、游戲引擎還是Web客戶端,都可以使用Rust。另外,它對有關(guān)作用域和內(nèi)存分配的傳統(tǒng)思維發(fā)出挑戰(zhàn),會讓你成為一個可以駕馭任何語言的更好的程序員,無論是C#、Java還是Python。Amazon、Microsoft和Google等公司的最新動向表明,這個生態(tài)系統(tǒng)現(xiàn)在已經(jīng)發(fā)展到相當穩(wěn)定的程度,已經(jīng)足以讓企業(yè)安心使用,這對未來的Rust專業(yè)人員來說是一個很好的信號。
在這本書中,我們匯編了最有用的實驗,提供了實用的用例,使你能快速在生產(chǎn)環(huán)境中使用。我們努力涵蓋了各種不同的應(yīng)用,希望你能從中找到有用的概念,以及可以直接用于日常開發(fā)工作的解決方案。
本書面向?qū)ο?/span>
這本書與學習編程語言通常使用的書有所不同。這里沒有很深入地探究概念,我們希望展示各種可能的項目、解決方案和應(yīng)用,提供進一步的概念和其他資源的鏈接。所以,我們認為這本書很適合那些想要快速開發(fā)實用應(yīng)用的人,而無論他們有多少Rust經(jīng)驗。不過,編程基礎(chǔ)還是必要的(無論哪種語言),這是建立Rust技能的基礎(chǔ)。
本書內(nèi)容
第1章 Rust入門,介紹如何在你的計算機上建立Rust工具鏈,以及Rust語言的基本構(gòu)造。這包括為循環(huán)、if表達式、trait(特征)和struct(結(jié)構(gòu)體)等語言構(gòu)造編寫測試和基準測試。
第2章 高級Rust進階,將回答有關(guān)這個語言更高級特性的問題,并介紹創(chuàng)建實用程序的模式。這一章的內(nèi)容包括復(fù)雜場景中的借用和所有權(quán)、Option類型、模式匹配、泛型、顯式生命周期和enum (枚舉)。
第3章 用cargo管理項目,使用cargo工具管理額外的crate、擴展、項目和測試。你會在這里找到有關(guān)技巧,可以幫助你處理更大的項目,并解決管理這些項目時面對的挑戰(zhàn)。
第4章 無畏并發(fā), 這一章會介紹一些最佳實踐和技巧來構(gòu)建安全、快速的程序。除此以外,還會介紹諸如Rayon等流行的庫,我們會展示Rust是完成各種并發(fā)任務(wù)的一個非常好的語言。
第5章 處理錯誤和其他結(jié)果, 解釋Rust如何使用Result類型和panic (恐慌)來完成錯誤處理,將大部分失敗用例集成到需要處理的一個常規(guī)工作流中。這一章將關(guān)于如何避免意外崩潰和不必要的復(fù)雜性為你展示一些實用的模式和最佳實踐。
第6章 用宏表達,將解釋Rust特有的宏系統(tǒng)如何在編譯之前擴展程序的功能(而且會采用一種類型安全的方式)。可以為很多可能的自定義場景實現(xiàn)這些宏,很多crate都使用了這個功能。這一章就是要介紹如何創(chuàng)建有用的宏,使你的生活更輕松,也讓你的程序更安全。
第7章 Rust與其他語言集成,會介紹如何在Rust中使用和處理不同的二進制單元和語言,來移植遺留軟件,或者從更好的SDK獲益。這主要通過外部函數(shù)接口ForeignFunctionInterface,FFI)實現(xiàn),它支持與其他原生庫快速而容易地集成。不僅如此,還可以使用WebAssembly從Rust發(fā)布到npm (Node.js包存儲庫)。所有這些內(nèi)容都會在這一章討論。
第8章 Web安全編程,使用一個先進的Web框架(actix-Web)介紹Web編程的基礎(chǔ)知識,它展示了一種基于actor的方法來處理請求,這個Web框架在Microsoft得到了有效使用。
第9章 簡化系統(tǒng)編程,解釋Rust為什么是在資源有限的小設(shè)備上運行工作負載的一個很好的選擇。具體地,由于沒有垃圾回收器和相應(yīng)的可預(yù)測運行時環(huán)境,這使它非常適合運行傳感器數(shù)據(jù)收集器。這一章將介紹創(chuàng)建這樣一個循環(huán)并結(jié)合必要的驅(qū)動器來讀取數(shù)據(jù)。
第10章 Rust實戰(zhàn),介紹Rust編程中的實際問題,如解析命令行參數(shù)、使用神經(jīng)網(wǎng)絡(luò)(使用PyTorch的C++ API實現(xiàn)機器學習)、搜索、正則表達式、Web請求等。
目錄
序
前言
第1章 Rust入門 1
1.1 建立環(huán)境 1
1.1.1 準備工作 2
1.1.2 實現(xiàn)過程 2
1.1.3 工作原理 4
1.2 使用命令行I/O 4
1.2.1 實現(xiàn)過程 4
1.2.2 工作原理 6
1.3 創(chuàng)建和使用數(shù)據(jù)類型 7
1.3.1 實現(xiàn)過程 7
1.3.2 工作原理 11
1.4 控制執(zhí)行流 12
1.4.1 實現(xiàn)過程 12
1.4.2 工作原理 15
1.5 用crate和模塊劃分代碼 16
1.5.1 準備工作 16
1.5.2 實現(xiàn)過程 16
1.5.3 工作原理 21
1.6 編寫測試和基準測試 22
1.6.1 準備工作 22
1.6.2 實現(xiàn)過程 22
1.6.3 工作原理 27
1.7 為代碼提供文檔 28
1.7.1 準備工作 29
1.7.2 實現(xiàn)過程 29
1.7.3 工作原理 32
1.8 測試你的文檔 33
1.8.1 準備工作 33
1.8.2 實現(xiàn)過程 33
1.8.3 工作原理 37
1.9 在類型間共享代碼 38
1.9.1 實現(xiàn)過程 38
1.9.2 工作原理 42
1.10 Rust中的序列類型 43
1.10.1 實現(xiàn)過程 44
1.10.2 工作原理 46
1.11 調(diào)試Rust 47
1.11.1 準備工作 47
1.11.2 實現(xiàn)過程 47
1.11.3 工作原理 50
第2章 高級Rust進階 52
2.1 用枚舉創(chuàng)建有意義的數(shù) 52
2.1.1 實現(xiàn)過程 52
2.1.2 工作原理 56
2.2 沒有null 57
2.2.1 實現(xiàn)過程 57
2.2.2 工作原理 60
2.3 使用模式匹配的復(fù)雜條件 60
2.3.1 實現(xiàn)過程 61
2.3.2 工作原理 66
2.4 實現(xiàn)自定義迭代器 67
2.4.1 準備工作 67
2.4.2 實現(xiàn)過程 67
2.4.3 工作原理 70
2.5 高效地過濾和轉(zhuǎn)換序列 71
2.5.1 準備工作 71
2.5.2 實現(xiàn)過程 71
2.5.3 工作原理 74
2.6 以unsafe方式讀取內(nèi)存 75
2.6.1 實現(xiàn)過程 75
2.6.2 工作原理 77
2.7 共享所有權(quán) 78
2.7.1 準備工作 78
2.7.2 實現(xiàn)過程 79
2.7.3 工作原理 82
2.8 共享可變所有權(quán) 82
2.8.1 準備工作 83
2.8.2 實現(xiàn)過程 83
2.8.3 工作原理 87
2.9 有顯式生命周期的引用 88
2.9.1 實現(xiàn)過程 88
2.9.2 工作原理 94
2.10 用trait綁定強制行為 94
2.10.1 實現(xiàn)過程 94
2.10.2 工作原理 97
2.11 使用泛型數(shù)據(jù)類型 97
2.11.1 實現(xiàn)過程 97
2.11.2 工作原理 102
第3章 用Cargo管理項目 104
3.1 利用工作空間組織大型項目 105
3.1.1 實現(xiàn)過程 105
3.1.2 工作原理 108
3.2 上傳到crates.io 110
3.2.1 準備工作 110
3.2.2 實現(xiàn)過程 110
3.2.3 工作原理 115
3.3 使用依賴和外部crate 116
3.3.1 實現(xiàn)過程 116
3.3.2 工作原理 120
3.3.3 參考資料 121
3.4 用子命令擴展cargo 121
3.4.1 準備工作 122
3.4.2 實現(xiàn)過程 122
3.4.3 工作原理 122
3.5 用cargo測試你的項目 123
3.5.1 實現(xiàn)過程 123
3.5.2 工作原理 127
3.6 使用cargo持續(xù)集成 128
3.6.1 準備工作 128
3.6.2 實現(xiàn)過程 128
3.6.3 工作原理 131
3.7 定制構(gòu)建 132
3.7.1 實現(xiàn)過程 132
3.7.2 工作原理 134
第4章 無畏并發(fā) 136
4.1 將數(shù)據(jù)移入線程 136
4.1.1 實現(xiàn)過程 137
4.1.2 工作原理 140
4.2 管理多個線程 141
4.2.1 實現(xiàn)過程 141
4.2.2 工作原理 142
4.3 使用通道在線程間通信 143
4.3.1 實現(xiàn)過程 143
4.3.2 工作原理 146
4.4 共享可變狀態(tài) 146
4.4.1 實現(xiàn)過程 146
4.4.2 工作原理 148
4.5 Rust中的多進程 149
4.5.1 實現(xiàn)過程 149
4.5.2 工作原理 152
4.6 使順序代碼變?yōu)椴⑿?152
4.6.1 實現(xiàn)過程 152
4.6.2 工作原理 158
4.7 向量中的并發(fā)數(shù)據(jù)處理 158
4.7.1 實現(xiàn)過程 159
4.7.2 工作原理 166
4.8 共享不可變狀態(tài) 166
4.8.1 實現(xiàn)過程 167
4.8.2 工作原理 171
4.9 使用actor處理異步消息 171
4.9.1 實現(xiàn)過程 171
4.9.2 工作原理 174
4.10 使用future的異步編程 175
4.10.1 實現(xiàn)過程 175
4.10.2 工作原理 176
第5章 處理錯誤和其他結(jié)果 178
5.1 負責任地恐慌 178
5.1.1 實現(xiàn)過程 178
5.1.2 工作原理 181
5.2 處理多個錯誤 182
5.2.1 實現(xiàn)過程 182
5.2.2 工作原理 184
5.3 處理異常結(jié)果 185
5.3.1 實現(xiàn)過程 185
5.3.2 工作原理 188
5.4 無縫的錯誤處理 188
5.4.1 實現(xiàn)過程 188
5.4.2 工作原理 190
5.5 定制錯誤 191
5.5.1 實現(xiàn)過程 191
5.5.2 工作原理 193
5.6 彈性編程 193
5.6.1 實現(xiàn)過程 193
5.6.2 工作原理 194
5.7 使用外部crate來完成錯誤處理 194
5.7.1 實現(xiàn)過程 195
5.7.2 工作原理 196
5.8 Option和Result間轉(zhuǎn)移 197
5.8.1 實現(xiàn)過程 197
5.8.2 工作原理 199
第6章 用宏表達 200
6.1 在Rust中構(gòu)建自定義宏 200
6.1.1 實現(xiàn)過程 201
6.1.2 工作原理 202
6.2 用宏實現(xiàn)匹配 203
6.2.1 實現(xiàn)過程 203
6.2.2 工作原理 205
6.3 使用預(yù)定義的宏 206
6.3.1 實現(xiàn)過程 206
6.3.2 工作原理 208
6.4 使用宏生成代碼 209
6.4.1 實現(xiàn)過程 209
6.4.2 工作原理 212
6.5 宏重載 213
6.5.1 實現(xiàn)過程 213
6.5.2 工作原理 216
6.6 為參數(shù)范圍使用重復(fù) 216
6.6.1 實現(xiàn)過程 217
6.6.2 工作原理 219
6.7 不要自我重復(fù) 219
6.7.1 實現(xiàn)過程 220
6.7.2 工作原理 222
第7章 與其他語言集成 223
7.1 包含遺留C代碼 223
7.1.1 準備工作 224
7.1.2 實現(xiàn)過程 225
7.1.3 工作原理 229
7.2 從Node.js使用FFI調(diào)用Rust 231
7.2.1 準備工作 231
7.2.2 實現(xiàn)過程 232
7.2.3 工作原理 235
7.3 在瀏覽器中運行Rust 236
7.3.1 準備工作 236
7.3.2 實現(xiàn)過程 237
7.3.3 工作原理 241
7.4 使用Rust和Python 242
7.4.1 準備工作 242
7.4.2 實現(xiàn)過程 243
7.4.3 工作原理 249
7.5 為遺留應(yīng)用生成綁定 250
7.5.1 準備工作 250
7.5.2 實現(xiàn)過程 251
7.5.3 工作原理 255
第8章 Web安全編程 256
8.1 建立 Web服務(wù)器 256
8.1.1 準備工作 257