第1 章 新時代的語言 1
1.1 緣起 1
1.2 設計哲學 3
1.2.1 內存安全 3
1.2.2 零成本抽象 4
1.2.3 實用性 5
1.3 現狀與未來 7
1.3.1 語言架構 8
1.3.2 開源社區 9
1.3.3 發展前景 9
1.4 Rust 代碼如何執行 10
1.5 小結 10
第2 章 語言精要 11
2.1 Rust 語言的基本構成 11
2.1.1 語言規範 11
2.1.2 編譯器 12
2.1.3 核心庫 12
2.1.4 標準庫 12
2.1.5 包管理器 13
2.2 語句與錶達式 13
2.3 變量與綁定 14
2.3.1 位置錶達式和值錶達式 15
2.3.2 不可變綁定與可變綁定 15
2.3.3 所有權與引用 16
2.4 函數與閉包 17
2.4.1 函數定義 17
2.4.2 作用域與生命周期 18
2.4.3 函數指針 19
2.4.5 CTFE 機製 20
2.4.6 閉包 20
2.5 流程控製 22
2.5.1 條件錶達式 22
2.5.2 循環錶達式 23
2.5.3 match 錶達式與模式匹配 24
2.5.4 if let 和while let 錶達式 25
2.6 基本數據類型 26
2.6.1 布爾類型 26
2.6.2 基本數字類型 26
2.6.3 字符類型 27
2.6.4 數組類型 28
2.6.5 範圍類型 29
2.6.6 切片類型 29
2.6.7 str 字符串類型 30
2.6.8 原生指針 31
2.6.9 never 類型 31
2.7 復閤數據類型 32
2.7.1 元組 32
2.7.2 結構體 33
2.7.3 枚舉體 36
2.8 常用集閤類型 38
2.8.1 綫性序列:嚮量 38
2.8.2 綫性序列:雙端隊列 39
2.8.3 綫性序列:鏈錶 40
2.8.4 Key-Value 映射錶:HashMap 和BTreeMap 40
2.8.5 集閤:HashSet 和BTreeSet 41
2.8.6 優先隊列:BinaryHeap 42
2.9 智能指針 42
2.10 泛型和trait 43
2.10.1 泛型 43
2.10.2 trait 44
2.11 錯誤處理 47
2.12 錶達式優先級 48
2.13 注釋與打印 48
2.14 小結 50
第3 章 類型係統 51
3.1 通用概念 51
3.1.1 類型係統的作用 51
3.1.2 類型係統的分類 52
3.1.3 類型係統與多態性 53
3.2 Rust 類型係統概述 53
3.2.1 類型大小 53
3.2.2 類型推導 58
3.3 泛型 60
3.3.1 泛型函數 60
3.3.2 泛型返迴值自動推導 62
3.4 深入trait 62
3.4.1 接口抽象 63
3.4.2 泛型約束 69
3.4.3 抽象類型 71
3.4.4 標簽trait 77
3.5 類型轉換 83
3.5.1 Deref 解引用 83
3.5.2 as 操作符 86
3.5.3 From 和Into 88
3.6 當前trait 係統的不足 89
3.6.1 孤兒規則的局限性 90
3.6.2 代碼復用的效率不高 91
3.6.3 抽象錶達能力有待改進 93
3.7 小結 94
第4 章 內存管理 95
4.1 通用概念 95
4.1.1 棧 96
4.1.2 堆 99
4.1.3 內存布局 101
4.2 Rust 中的資源管理 103
4.2.1 變量和函數 103
4.2.2 智能指針與RAII 106
4.2.3 內存泄漏與內存安全 110
4.2.4 復閤類型的內存分配和布局 115
4.3 小結 117
第5 章 所有權係統 119
5.1 通用概念 120
5.2 所有權機製 123
5.3 綁定、作用域和生命周期 125
5.3.1 不可變與可變 126
5.3.2 綁定的時間屬性——生命周期 127
5.4 所有權藉用 131
5.5 生命周期參數 135
5.5.1 顯式生命周期參數 136
5.5.2 省略生命周期參數 143
5.5.3 生命周期限定 145
5.5.4 trait 對象的生命周期 145
5.6 智能指針與所有權 146
5.6.1 共享所有權 Rc<T>和Weak<T> 149
5.6.2 內部可變性Cell<T>和RefCell<T> 151
5.6.3 寫時復製Cow<T> 153
5.7 並發安全與所有權 156
5.8 非詞法作用域生命周期 157
5.9 小結 161
第6 章 函數、閉包與迭代器 162
6.1 函數 162
6.1.1 函數屏蔽 164
6.1.2 函數參數模式匹配 164
6.1.3 函數返迴值 165
6.1.4 泛型函數 166
6.1.5 方法與函數 167
6.1.6 高階函數 168
6.2 閉包 171
6.2.1 閉包的基本語法 172
6.2.2 閉包的實現 173
6.2.3 閉包與所有權 178
6.2.4 閉包作為函數參數和返迴值 184
6.2.5 高階生命周期 190
6.3 迭代器 194
6.3.1 外部迭代器和內部迭代器 194
6.3.2 Iterator trait 195
6.3.3 IntoIterator trait 和迭代器 199
6.3.4 迭代器適配器 202
6.3.5 消費器 207
6.3.6 自定義迭代器適配器 211
6.4 小結 214
第7 章 結構化編程 216
7.1 麵嚮對象風格編程 217
7.1.1 結構體 217
7.1.2 枚舉體 225
7.1.3 析構順序 230
7.2 常用設計模式 233
7.2.1 建造者模式 234
7.2.2 訪問者模式 236
7.2.3 RAII 模式 239
7.3 小結 243
第8 章 字符串與集閤類型 244
8.1 字符串 244
8.1.1 字符編碼 244
8.1.2 字符 247
8.1.3 字符串分類 249
8.1.4 字符串的兩種處理方式 251
8.1.5 字符串的修改 253
8.1.6 字符串的查找 256
8.1.7 與其他類型相互轉換 265
8.1.8 迴顧 270
8.2 集閤類型 271
8.2.1 動態可增長數組 271
8.2.2 映射集 281
8.3 理解容量 289
8.4 小結 292
第9 章 構建健壯的程序 294
9.1 通用概念 294
9.2 消除失敗 295
9.3 分層處理錯誤 297
9.3.1 可選值Option<T> 298
9.3.2 錯誤處理Result<T, E> 302
9.4 恐慌(Panic) 314
9.5 第三方庫 316
9.6 小結 319
第10 章 模塊化編程 320
10.1 包管理 321
10.1.1 使用Cargo 創建包 321
10.1.2 使用第三方包 323
10.1.3 Cargo.toml 文件格式 331
10.1.4 自定義Cargo 337
10.2 模塊係統 339
10.3 從零開始實現一個完整功能包 344
10.3.1 使用Cargo 創建新項目 345
10.3.2 使用structopt 解析命令行參數 345
10.3.3 定義統一的錯誤類型 347
10.3.4 讀取CSV 文件 348
10.3.5 替換CSV 文件中的內容 351
10.3.6 進一步完善包 353
10.4 可見性和私有性 358
10.5 小結 360
第11 章 安全並發 362
11.1 通用概念 362
11.1.1 多進程和多綫程 363
11.1.2 事件驅動、異步迴調和協程 364
11.1.3 綫程安全 365
11.2 多綫程並發編程 370
11.2.1 綫程管理 371
11.2.2 Send 和Sync 375
11.2.3 使用鎖進行綫程同步 379
11.2.4 屏障和條件變量 384
11.2.5 原子類型 386
11.2.6 使用Channel 進行綫程間通信 388
11.2.7 內部可變性探究 397
11.2.8 綫程池 399
11.2.9 使用Rayon 執行並行任務 407
11.2.10 使用Crossbeam 409
11.3 異步並發 412
11.3.1 生成器 413
11.3.2 Future 並發模式 418
11.3.3 async/await 421
11.4 數據並行 428
11.4.1 什麼是SIMD 429
11.4.2 在Rust 中使用SIMD 430
11.5 小結 434
第12 章 元編程 435
12.1 反射 436
12.1.1 通過is 函數判斷類型 436
12.1.2 轉換到具體類型 437
12.1.3 非靜態生命周期類型 439
12.2 宏係統 440
12.2.1 起源 440
12.2.2 Rust 中宏的種類 441
12.2.3 編譯過程 442
12.2.4 聲明宏 445
12.2.5 過程宏 458
12.3 編譯器插件 472
12.4 小結 475
第13 章 超越安全的邊界 477
13.1 Unsafe Rust 介紹 477
13.1.1 Unsafe 語法 478
13.1.2 訪問和修改可變靜態變量 480
13.1.3 Union 聯閤體 480
13.1.4 解引用原生指針 483
13.2 基於Unsafe 進行安全抽象 484
13.2.1 原生指針 484
13.2.2 子類型與型變 489
13.2.3 未綁定生命周期 494
13.2.4 Drop 檢查 495
13.2.5 NonNull<T>指針 505
13.2.6 Unsafe 與恐慌安全 508
13.2.7 堆內存分配 508
13.2.8 混閤代碼內存安全架構三大原則 510
13.3 和其他語言交互 510
13.3.1 外部函數接口 510
13.3.2 與C/C++語言交互 514
13.3.3 使用Rust 提升動態語言性能 528
13.4 Rust 與WebAssembly 532
13.4.1 WebAssembly 要點介紹 533
13.4.2 使用Rust 開發WebAssembly 539
13.4.3 打造WebAssembly 開發生態 541
13.5 小結 543
附錄A Rust 開發環境指南 544
附錄B Rust 如何調試代碼 549
· · · · · · (
收起)