範長春,中國科學院自動化研究所博士,Rust開源項目貢獻者,前微軟員工。目前就職於synopsys公司參與源代碼靜態檢查工具coverity軟件的開發工作。喜歡研究編譯器以及源代碼靜態檢查。在網上撰寫瞭大量關於Rust語言的技術文章,得到瞭不錯的反響。
前言
第一部分 基礎知識
第1章 與君初相見 2
1.1 版本和發布策略 2
1.2 安裝開發環境 4
1.3 Hello World 7
1.4 Prelude 8
1.5 Format格式詳細說明 8
第2章 變量和類型 10
2.1 變量聲明 10
2.1.1 變量遮蔽 12
2.1.2 類型推導 13
2.1.3 類型彆名 14
2.1.4 靜態變量 15
2.1.5 常量 16
2.2 基本數據類型 16
2.2.1 bool 16
2.2.2 char 17
2.2.3 整數類型 17
2.2.4 整數溢齣 19
2.2.5 浮點類型 21
2.2.6 指針類型 23
2.2.7 類型轉換 23
2.3 復閤數據類型 24
2.3.1 tuple 25
2.3.2 struct 25
2.3.3 tuple struct 27
2.3.4 enum 29
2.3.5 類型遞歸定義 32
第3章 語句和錶達式 34
3.1 語句 34
3.2 錶達式 34
3.2.1 運算錶達式 35
3.2.2 賦值錶達式 37
3.2.3 語句塊錶達式 38
3.3 if-else 39
3.3.1 loop 40
3.3.2 while 41
3.3.3 for循環 42
第4章 函數 44
4.1 簡介 44
4.2 發散函數 46
4.3 main函數 47
4.4 const fn 48
4.5 函數遞歸調用 49
第5章 trait 50
5.1 成員方法 50
5.2 靜態方法 53
5.3 擴展方法 55
5.4 完整函數調用語法 56
5.5 trait約束和繼承 58
5.6 Derive 59
5.7 trait彆名 60
5.8 標準庫中常見的trait簡介 61
5.8.1 Display和Debug 61
5.8.2 PartialOrd / Ord /
PartialEq / Eq 62
5.8.3 Sized 63
5.8.4 Default 64
5.9 總結 65
第6章 數組和字符串 66
6.1 數組 66
6.1.1 內置方法 67
6.1.2 多維數組 67
6.1.3 數組切片 67
6.1.4 DST和胖指針 68
6.1.5 Range 70
6.1.6 邊界檢查 72
6.2 字符串 74
6.2.1 &str 74
6.2.2 String 75
第7章 模式解構 77
7.1 簡介 77
7.2 match 78
7.2.1 exhaustive 79
7.2.2 下劃綫 80
7.2.3 match也是錶達式 82
7.2.4 Guards 83
7.2.5 變量綁定 84
7.2.6 ref和mut 85
7.3 if-let和while-let 88
7.4 函數和閉包參數做模式解構 89
7.5 總結 90
第8章 深入類型係統 91
8.1 代數類型係統 91
8.2 Never Type 94
8.3 再談Option類型 97
第9章 宏 102
9.1 簡介macro 102
9.1.1 實現編譯階段檢查 102
9.1.2 實現編譯期計算 103
9.1.3 實現自動代碼生成 103
9.1.4 實現語法擴展 103
9.2 示範型宏 103
9.3 宏1.1 105
第二部分 內存安全
第10章 內存管理基礎 110
10.1 堆和棧 110
10.2 段錯誤 111
10.3 內存安全 112
第11章 所有權和移動語義 114
11.1 什麼是所有權 114
11.2 移動語義 116
11.3 復製語義 118
11.4 Box類型 120
11.5 Clone VS. Copy 121
11.5.1 Copy的含義 121
11.5.2 Copy 的實現條件 121
11.5.3 Clone的含義 122
11.5.4 自動derive 123
11.5.5 總結 123
11.6 析構函數 124
11.6.1 資源管理 125
11.6.2 主動析構 126
11.6.3 Drop VS. Copy 129
11.6.4 析構標記 129
第12章 藉用和生命周期 132
12.1 生命周期 132
12.2 藉用 132
12.3 藉用規則 134
12.4 生命周期標記 136
12.4.1 函數的生命周期標記 136
12.4.2 類型的生命周期標記 138
12.5 省略生命周期標記 139
第13章 藉用檢查 141
13.1 編譯錯誤示例 142
13.2 內存不安全示例:修改枚舉 143
13.3 內存不安全示例:迭代器
失效 144
13.4 內存不安全示例:懸空指針 146
13.5 小結 148
第14章 NLL(Non-Lexical-
Lifetime) 150
14.1 NLL希望解決的問題 150
14.2 NLL的原理 154
14.3 小結 157
第15章 內部可變性 158
15.1 Cell 158
15.2 RefCell 161
15.3 UnsafeCell 164
第16章 解引用 169
16.1 自定義解引用 169
16.2 自動解引用 171
16.3 自動解引用的用處 171
16.4 有時候需要手動處理 173
16.5 智能指針 175
16.5.1 引用計數 175
16.5.2 Cow 178
16.6 小結 180
第17章 泄漏 181
17.1 內存泄漏 181
17.2 內存泄漏屬於內存安全 184
17.3 析構函數泄漏 185
第18章 Panic 190
18.1 什麼是panic 190
18.2 Panic實現機製 191
18.3 Panic Safety 192
18.4 小結 197
第19章 Unsafe 198
19.1 unsafe關鍵字 198
19.2 裸指針 199
19.3 內置函數 201
19.3.1 transmute 201
19.3.2 內存讀寫 202
19.3.3 綜閤示例 204
19.4 分割藉用 206
19.5 協變 209
19.5.1 什麼是協變 209
19.5.2 PhantomData 211
19.6 未定義行為 214
19.7 小結 215
第20章 Vec源碼分析 216
20.1 內存申請 217
20.2 內存擴容 220
20.3 內存釋放 222
20.3.1 Vec的析構函數 222
20.3.2 Drop Check 223
20.4 不安全的邊界 226
20.5 自定義解引用 227
20.6 迭代器 228
20.7 panic safety 231
第三部分 高級抽象
第21章 泛型 234
21.1 數據結構中的泛型 234
21.2 函數中的泛型 235
21.3 impl塊中的泛型 237
21.4 泛型參數約束 237
21.5 關聯類型 241
21.6 何時使用關聯類型 244
21.7 泛型特化 246
21.7.1 特化的意義 247
21.7.2 default上下文關鍵字 248
21.7.3 交叉 impl 250
第22章 閉包 252
22.1 變量捕獲 254
22.2 move關鍵字 256
22.3 Fn/FnMut/FnOnce 257
22.4 閉包與泛型 259
22.5 閉包與生命周期 261
第23章 動態分派和靜態分派 264
23.1 trait object 265
23.2 object safe 268
23.3 impl trait 271
第24章 容器與迭代器 275
24.1 容器 275
24.1.1 Vec 275
24.1.2 VecDeque 277
24.1.3 HashMap 277
24.1.4 BTreeMap 281
24.2 迭代器 283
24.2.1 實現迭代器 283
24.2.2 迭代器的組閤 284
24.2.3 for循環 285
第25章 生成器 289
25.1 簡介 289
25.2 對比迭代器 291
25.3 對比立即求值 292
25.4 生成器的原理 293
25.4.1 生成器原理簡介 293
25.4.2 自引用類型 297
25.5 協程簡介 298
第26章 標準庫簡介 302
26.1 類型轉換 302
26.1.1 AsRef / AsMut 302
26.1.2 Borrow / BorrowMut 303
26.1.3 From / Into 304
26.1.4 ToOwned 305
26.1.5 ToString / FromStr 305
26.2 運算符重載 306
26.3 I/O 308
26.3.1 平颱相關字符串 308
26.3.2 文件和路徑 309
26.3.3 標準輸入輸齣 310
26.3.4 進程啓動參數 311
26.4 Any 311
第四部分 綫程安全
第27章 綫程安全 314
27.1 什麼是綫程 314
27.2 啓動綫程 316
27.3 免數據競爭 317
27.4 Send & Sync 320
第28章 詳解Send和Sync 321
28.1 什麼是Send 321
28.2 什麼是Sync 322
28.3 自動推理 323
28.4 小結 324
第29章 狀態共享 325
29.1 Arc 325
29.2 Mutex 326
29.3 RwLock 328
29.4 Atomic 329
29.5 死鎖 331
29.6 Barrier 333
29.7 Condvar 334
29.8 全局變量 335
29.9 綫程局部存儲 336
29.10 總結 337
第30章 管道 339
30.1 異步管道 339
30.2 同步管道 341
第31章 第三方並行開發庫 343
31.1 threadpool 343
31.2 scoped-threadpool 344
31.3 parking_lot 345
31.4 crossbeam 345
31.5 rayon 346
第五部分 實用設施
第32章 項目和模塊 350
32.1 cargo 350
32.2 項目依賴 353
32.2.1 配置 355
32.2.2 workspace 355
32.2.3 build.rs 356
32.3 模塊管理 358
32.3.1 文件組織 358
32.3.2 可見性 360
32.3.3 use關鍵字 362
第33章 錯誤處理 364
33.1 基本錯誤處理 364
33.2 組閤錯誤類型 366
33.3 問號運算符 367
33.4 main函數中使用問號運算符 372
33.5 新的Failure庫 373
第34章 FFI 375
34.1 什麼是FFI 375
34.2 從C調用Rust庫 376
34.3 從Rust調用C庫 378
34.4 更復雜的數據類型 378
第35章 文檔和測試 381
35.1 文檔 381
35.2 測試 382
附錄 詞匯錶 387
· · · · · · (
收起)
本書詳細描述瞭Rust語言的基本語法,穿插講解一部分高級使用技巧,並以更容易理解的方式解釋其背後的設計思想。全書總共分五個部分。
第一部分介紹Rust基本語法,因為對任何程序設計語言來說,語法都是基礎,學習這部分是理解其他部分的前提。
第二部分介紹屬於Rust獨一無二的內存管理方式。它設計瞭一組全新的機製,既保證瞭安全性,又保持瞭強大的內存布局控製力,而且沒有額外性能損失。這部分是本書的重點和核心所在,也是Rust語言的思想內核精髓之處。
第三部分介紹Rust的抽象錶達能力。它支持多種編程範式,以及較為強大的抽象錶達能力。
第四部分介紹並發模型。在目前這個階段,對並行編程的支持是新一代編程語言不可繞過的重要話題。Rust也吸收瞭業界最新的發展成果,對並發有良好支持。
第五部分介紹一些實用設施。Rust語言有許多創新,但它絕不是高高在上孤芳自賞的類型,設計者在設計過程中充分考慮瞭語言的工程實用性。眾多在其他語言中被證明過的優秀實踐被吸收瞭進來,有利於提升實際工作效率。
通過此書,讀者能夠深入透徹地理解Rust的高階特性,比如代數類型係統、生命周期、藉用檢查、內部可變性、綫程安全、泛型、閉包、迭代器、生成器等。可作為參考書供學生、軟件工程師、研究人員以及其他對Rust語言感興趣的讀者參考。本書所揭示的Rust編程語言的設計思想對於理解其他係統編程語言,如C++,也非常有幫助。
深入淺齣Rust 下載 mobi epub pdf txt 電子書
評分
☆☆☆☆☆
符閤“淺齣 Rust”標題,語法和語言知識點都提到瞭一些,適閤入門
評分
☆☆☆☆☆
##作為Rust小白,這是我的第一本Rust書.我也不知哪來的勇氣,不僅僅講解Rust語法,而是分析瞭如何實現,以及為什麼要這麼用.雖然看的我頭昏腦漲,對於書籍本身還是要肯定的.. 畢竟是國産第一本Rust書,這個起點其實相當的高瞭。Rust在實踐中也並沒有鋪開,可見的未來也不會有Go那樣流行,大傢都是用愛發電。 書的第二部分相當的棒,可以說把語言各種特性分析透瞭,每個知識點都反復的詳細解釋瞭,從概念到實現的取捨都有很詳細的解釋,官方文檔都沒有做...
評分
☆☆☆☆☆
##20181012第一遍。這本書不算深,比較適閤初學者,當然不是沒有編程經驗的初學者,而是那些被C/C++搞得頭禿的碼農童鞋們。Rust的定位是係統級編程,對於業務開發的童鞋幫助不大,你寫業務還是用彆的算瞭。
看得齣來,Rust離成熟還遠,優勢在於比C/C++這樣的語言曆史包袱小,所以可以無所顧忌地演進,比如引入瞭很多近年來得到實踐證明的新特性,又不至於寫很多繁瑣的代碼。缺點在於還是太年輕,很多我期待的功能沒有穩定下來成為標準庫,比如協程。生命周期設計得很復雜,是最難理解的部分,感覺這個是未來最大的隱患之一。另外,Rust隻是保證內存安全,像內存泄漏之類的問題還是沒有辦法很好地解決。
看的是kindle電子版,代碼塊的縮進有問題,其他沒有什麼大貓病。
評分
☆☆☆☆☆
##2018 年總算有一本讀完的書。。。
很好的 Rust 入門教程,阿德師兄做的校審
評分
☆☆☆☆☆
評分
☆☆☆☆☆
評分
☆☆☆☆☆
##作為Rust小白,這是我的第一本Rust書.我也不知哪來的勇氣,不僅僅講解Rust語法,而是分析瞭如何實現,以及為什麼要這麼用.雖然看的我頭昏腦漲,對於書籍本身還是要肯定的.. 畢竟是國産第一本Rust書,這個起點其實相當的高瞭。Rust在實踐中也並沒有鋪開,可見的未來也不會有Go那樣流行,大傢都是用愛發電。 書的第二部分相當的棒,可以說把語言各種特性分析透瞭,每個知識點都反復的詳細解釋瞭,從概念到實現的取捨都有很詳細的解釋,官方文檔都沒有做...
評分
☆☆☆☆☆
##看完這本書翻到最後的封底纔看到本書作者是中科院博士以及 Synopsys 的 Coverage 項目維護者。 總體來說本書通俗易懂,難度進階比較閤理,就是有些說明性語言藉用瞭 Java 或者 C++ 中的概念,如果能夠脫離這種沒有必然關聯性的經驗性說明可以進一步增加本書的普適性。 扣瞭一顆...
評分
☆☆☆☆☆
##2018 年總算有一本讀完的書。。。
很好的 Rust 入門教程,阿德師兄做的校審