第 1 章 為什麼是Rust 1
第 2 章 Rust初體驗 5
2.1 下載和安裝Rust 5
2.2 一個簡單的函數 7
2.3 編寫和運行單元測試 9
2.4 處理命令行參數 9
2.5 一個簡單的Web服務器 13
2.6 並發 19
2.6.1 到底什麼是曼德布洛特集閤 19
2.6.2 解析成對的命令行參數 23
2.6.3 像素到復數的映射 25
2.6.4 繪製集閤 26
2.6.5 寫齣圖像文件 27
2.6.6 並發的曼德布洛特程序 29
2.6.7 運行曼德布洛特繪圖器 32
2.6.8 安全無形 34
第 3 章 基本類型 35
3.1 機器類型 38
3.1.1 整數類型 38
3.1.2 浮點類型 40
3.1.3 布爾類型 42
3.1.4 字符類型 43
3.2 元組 44
3.3 指針類型 45
3.3.1 引用 46
3.3.2 Box 46
3.3.3 原始指針 46
3.4 數組、嚮量和切片 47
3.4.1 數組 47
3.4.2 嚮量 48
3.4.3 逐個元素地構建嚮量 51
3.4.4 切片 51
3.5 字符串類型 52
3.5.1 字符串字麵量 52
3.5.2 字節字符串 53
3.5.3 字符串在內存中的錶示 53
3.5.4 字符串 55
3.5.5 使用字符串 56
3.5.6 其他類似字符串的類型 56
3.6 更多類型 57
第 4 章 所有權 58
4.1 所有權 59
4.2 轉移 63
4.2.1 更多轉移操作 68
4.2.2 轉移與控製流 69
4.2.3 轉移與索引內容 69
4.3 Copy類型:轉移的例外 71
4.4 Rc和Arc:共享所有權 74
第 5 章 引用 76
5.1 引用作為值 79
5.1.1 Rust引用與C++引用 79
5.1.2 給引用賦值 80
5.1.3 引用的引用 81
5.1.4 比較引用 81
5.1.5 引用永遠不為空 82
5.1.6 藉用對任意錶達式的引用 82
5.1.7 對切片和特型對象的引用 83
5.2 引用安全 83
5.2.1 藉用局部變量 83
5.2.2 接收引用作為參數 86
5.2.3 將引用作為參數傳遞 87
5.2.4 返迴引用 88
5.2.5 結構體包含引用 89
5.2.6 不同的生命期參數 91
5.2.7 省略生命期參數 92
5.3 共享與修改 93
5.4 徵服對象之海 99
第 6 章 錶達式 101
6.1 錶達式語言 101
6.2 塊與分號 102
6.3 聲明 103
6.4 if與match 105
6.5 循環 107
6.6 return錶達式 109
6.7 為什麼Rust有循環 110
6.8 函數與方法調用 111
6.9 字段與元素 112
6.10 引用操作符 113
6.11 算術、位、比較和邏輯操作符 113
6.12 賦值 114
6.13 類型轉換 114
6.14 閉包 115
6.15 優先級與關聯性 116
6.16 展望 118
第 7 章 錯誤處理 119
7.1 詫異 119
7.1.1 展開棧 120
7.1.2 中止進程 121
7.2 結果 121
7.2.1 捕獲錯誤 121
7.2.2 結果類型彆名 123
7.2.3 打印錯誤 123
7.2.4 傳播錯誤 124
7.2.5 處理多種錯誤類型 125
7.2.6 處理“不會發生”的錯誤 127
7.2.7 忽略錯誤 128
7.2.8 在main()中處理錯誤 128
7.2.9 聲明自定義錯誤類型 129
7.2.10 為什麼是結果 130
第 8 章 包和模塊 131
8.1 包 131
8.2 模塊 134
8.2.1 把模塊寫在單獨的文件中 135
8.2.2 路徑和導入 136
8.2.3 標準前置模塊 138
8.2.4 特性項,Rust的基礎 139
8.3 將程序作為庫發布 141
8.4 src/bin目錄 142
8.5 屬性 143
8.6 測試和文檔 145
8.6.1 集成測試 147
8.6.2 文檔 148
8.6.3 文檔測試 149
8.7 指定依賴 152
8.7.1 版本 152
8.7.2 Cargo.lock 153
8.8 把包發布到crates.io 154
8.9 工作空間 156
8.10 還有驚喜 156
第 9 章 結構體 158
9.1 命名字段結構體 158
9.2 類元組結構體 161
9.3 類基元結構體 161
9.4 結構體布局 162
9.5 通過impl定義方法 162
9.6 泛型結構體 165
9.7 帶生命期參數的結構體 167
9.8 為結構體類型派生共有特型 168
9.9 內部修改能力 168
第 10 章 枚舉與模式 172
10.1 枚舉 173
10.1.1 包含數據的枚舉 175
10.1.2 枚舉的內存布局 176
10.1.3 使用枚舉的富數據結構 176
10.1.4 泛型枚舉 178
10.2 模式 180
10.2.1 模式中的字麵量、變量和通配符 183
10.2.2 元組與結構體模式 184
10.2.3 引用模式 185
10.2.4 匹配多種可能性 187
10.2.5 模式護具 188
10.2.6 @模式 188
10.2.7 在哪裏使用模式 189
10.2.8 填充二叉樹 190
10.3 設計的考量 191
第 11 章 特型與泛型 192
11.1 使用特型 193
11.1.1 特型目標 194
11.1.2 特型目標布局 195
11.1.3 泛型函數 196
11.1.4 使用哪一個 199
11.2 定義和實現特型 200
11.2.1 默認方法 201
11.2.2 特型與其他人的類型 202
11.2.3 特型中的Self 204
11.2.4 子特型 205
11.2.5 靜態方法 205
11.3 完全限定方法調用 207
11.4 定義類型關係的特型 208
11.4.1 關聯類型(或迭代器工作原理) 208
11.4.2 泛型特型(或操作符重載的原理) 211
11.4.3 伴型特型(或rand::random()工作原理) 212
11.5 逆嚮工程綁定 213
11.6 小結 216
第 12 章 操作符重載 217
12.1 算術與位操作符 218
12.1.1 一元操作符 220
12.1.2 二元操作符 221
12.1.3 復閤賦值操作符 221
12.2 相等測試 222
12.3 順序比較 225
12.4 Index與IndexMut 227
12.5 其他操作符 229
第 13 章 實用特型 230
13.1 Drop 231
13.2 Sized 233
13.3 Clone 235
13.4 Copy 236
13.5 Deref與DerefMut 237
13.6 Default 239
13.7 AsRef與AsMut 241
13.8 Borrow與BorrowMut 242
13.9 From與Into 244
13.10 ToOwned 245
13.11 Borrow與ToOwned實例:謙遜的奶牛(Cow) 246
第 14 章 閉包 248
14.1 捕獲變量 249
14.1.1 藉用值的閉包 250
14.1.2 盜用值的閉包 250
14.2 函數與閉包類型 252
14.3 閉包的性能 254
14.4 閉包和安全 255
14.4.1 殺值的閉包 255
14.4.2 FnOnce 256
14.4.3 FnMut 257
14.5 迴調 259
14.6 有效使用閉包 261
第 15 章 迭代器 263
15.1 Iterator和IntoIterator特型 264
15.2 創建迭代器 265
15.2.1 iter和iter_mut方法 265
15.2.2 IntoIterator實現 266
15.2.3 drain方法 268
15.2.4 其他迭代器源 268
15.3 迭代器適配器 269
15.3.1 map和filter 269
15.3.2 filter_map和flat_map 271
15.3.3 scan 273
15.3.4 take和take_while 274
15.3.5 skip和skip_while 274
15.3.6 peekable 275
15.3.7 fuse 276
15.3.8 可逆迭代器與rev 277
15.3.9 inspect 278
15.3.10 chain 278
15.3.11 enumerate 279
15.3.12 zip 279
15.3.13 by_ref 280
15.3.14 cloned 281
15.3.15 cycle 281
15.4 消費迭代器 282
15.4.1 簡單纍計:count、sum和product 282
15.4.2 max和min 283
15.4.3 max_by和min_by 283
15.4.4 max_by_key和min_by_key 283
15.4.5 比較項序列 284
15.4.6 any和all 285
15.4.7 position、rposition和ExactSizeIterator 285
15.4.8 fold 285
15.4.9 nth 286
15.4.10 last 286
15.4.11 find 287
15.4.12 構建集閤:collect和FromIterator 287
15.4.13 Extend特型 289
15.4.14 partition 289
15.5 實現自己的迭代器 290
第 16 章 集閤 294
16.1 概述 295
16.2 Vec 296
16.2.1 訪問元素 296
16.2.2 迭代 298
16.2.3 增長和收縮嚮量 298
16.2.4 連接 300
16.2.5 拆分 301
16.2.6 交換 303
16.2.7 排序和搜索 303
16.2.8 比較切片 304
16.2.9 隨機元素 305
16.2.10 Rust排除無效錯誤 305
16.3 VecDeque 306
16.4 LinkedList 307
16.5 BinaryHeap 308
16.6 HashMap和BTreeMap 309
16.6.1 條目 311
16.6.2 映射迭代 313
16.7 HashSet和BTreeSet 313
16.7.1 集迭代 314
16.7.2 相等的值不相同 314
16.7.3 整集操作 315
16.8 散列 316
16.9 標準集閤之外 318
第 17 章 字符串與文本 319
17.1 Unicode背景知識 319
17.1.1 ASCII、Latin-1和Unicode 320
17.1.2 UTF-8 320
17.1.3 文本方嚮性 322
17.2 字符(char) 322
17.2.1 字符分類 322
17.2.2 處理數字 322
17.2.3 字符大小寫轉換 323
17.2.4 與整數相互轉換 324
17.3 String與str 324
17.3.1 創建字符串值 325
17.3.2 簡單檢查 325
17.3.3 追加和插入文本 326
17.3.4 刪除文本 327
17.3.5 搜索與迭代的約定 327
17.3.6 搜索文本的模式 328
17.3.7 搜索與替換 328
17.3.8 迭代文本 329
17.3.9 修剪 331
17.3.10 字符串大小寫轉換 331
17.3.11 從字符串解析齣其他類型 331
17.3.12 將其他類型轉換為字符串 332
17.3.13 作為其他類文本類型藉用 333
17.3.14 訪問UTF-8格式的文本 333
17.3.15 從UTF-8數據産生文本 334
17.3.16 阻止分配 335
17.3.17 字符串作為泛型集閤 336
17.4 格式化值 337
17.4.1 格式化文本值 338
17.4.2 格式化數值 339
17.4.3 格式化其他類型 341
17.4.4 為調試格式化值 341
17.4.5 為調試格式化指針 342
17.4.6 通過索引或名字引用參數 342
17.4.7 動態寬度與精度 343
17.4.8 格式化自定義類型 344
17.4.9 在你的代碼中使用格式化語言 345
17.5 正則錶達式 346
17.5.1 基本用法 347
17.5.2 懶構建Regex值 348
17.6 規範化 349
17.6.1 規範化形式 350
17.6.2 unicode-normalization包 351
第 18 章 輸入和輸齣 352
18.1 讀取器和寫入器 353
18.1.1 讀取器 354
18.1.2 緩衝讀取器 355
18.1.3 讀取文本行 356
18.1.4 收集行 358
18.1.5 寫入器 359
18.1.6 文件 360
18.1.7 搜尋 360
18.1.8 其他讀取器和寫入器類型 361
18.1.9 二進製數據、壓縮與序列化 362
18.2 文件與目錄 364
18.2.1 OsStr和Path 364
18.2.2 Path和PathBuf的方法 365
18.2.3 文件係統訪問函數 367
18.2.4 讀取目錄 368
18.2.5 平颱特定的特性 369
18.3 網絡編程 370
第 19 章 並發 373
19.1 並行分叉–閤並 374
19.1.1 産生及閤並 376
19.1.2 跨綫程錯誤處理 377
19.1.3 跨綫程共享不可修改數據 378
19.1.4 Rayon 380
19.1.5 重溫曼德布洛特集閤 382
19.2 通道 383
19.2.1 發送值 385
19.2.2 接收值 387
19.2.3 運行管道 388
19.2.4 通道特性與性能 390
19.2.5 綫程安全:Send與Sync 391
19.2.6 將所有迭代器都接到通道上 393
19.2.7 超越管道 394
19.3 共享可修改狀態 395
19.3.1 什麼是互斥量 395
19.3.2 Mutex 397
19.3.3 mut與Mutex 398
19.3.4 互斥量的問題 399
19.3.5 死鎖 399
19.3.6 中毒的互斥量 400
19.3.7 使用互斥量的多消費者通道 400
19.3.8 讀/寫鎖(RwLock) 401
19.3.9 條件變量(Condvar)402
19.3.10 原子類型 403
19.3.11 全局變量 404
19.4 習慣編寫Rust並發代碼 406
第 20 章 宏 407
20.1 宏基礎 408
20.1.1 宏擴展基礎 409
20.1.2 意外結果 410
20.1.3 重復 411
20.2 內置宏 413
20.3 調試宏 414
20.4 json!宏 415
20.4.1 片段類型 416
20.4.2 在宏裏使用遞歸 419
20.4.3 在宏裏使用特型 419
20.4.4 作用域與自淨宏 421
20.4.5 導入和導齣宏 424
20.5 匹配時避免語法錯誤 425
20.6 超越macro_rules! 426
第 21 章 不安全代碼 427
21.1 不安全源自哪裏 428
21.2 不安全的塊 429
21.3 不安全的函數 431
21.4 不安全的塊還是不安全的函數 433
21.5 未定義行為 434
21.6 不安全的特型 435
21.7 原始指針 437
21.7.1 安全解引用原始指針 439
21.7.2 示例:RefWithFlag 440
21.7.3 可空指針 442
21.7.4 類型大小與對齊 442
21.7.5 指針算術 443
21.7.6 移入和移齣內存 444
21.7.7 示例:GapBuffer 447
21.7.8 不安全代碼中的詫異安全性 453
21.8 外來函數:在Rust中調用C和C++ 453
21.8.1 查找共有數據錶示 454
21.8.2 聲明外來函數和變量 456
21.8.3 使用庫函數 458
21.8.4 libgit2的原始接口 461
21.8.5 libgit2的安全接口 466
21.9 小結 475
作者介紹 476
封麵介紹 476
· · · · · · (
收起)