新到貨2本75折
Rust程序設計(第2版)

Rust程序設計(第2版)

  • 定價:1079
  • 優惠價:87939
  • 運送方式:
  • 臺灣與離島
  • 海外
  • 可配送點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
  • 可取貨點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
載入中...
  • 分享
 

內容簡介

本書是Rust領域經典參考書,由業內資深系統程式師編寫,廣受讀者好評。
書中全面介紹了Rust這種新型系統程式設計語言——具有無與倫比的安全性,兼具C和C++的高性能,並大大簡化了併發程式的編寫。第2版對上一版內容進行了重組和完善,新增了對“非同步程式設計”的介紹。借助書中的大量案例,你也能用Rust編寫出兼顧安全性與高性能的程式。
 
本書內容包括基底資料型別、所有權、引用、運算式、錯誤處理、crate與模組、結構、枚舉與模式等基礎知識,以及特型與泛型、閉包、反覆運算器、集合、字串與文本、輸入與輸出、併發、非同步程式設計、巨集等進階知識。

 

作者介紹

吉姆·布蘭迪(Jim Blandy),Mozilla Firefox工程師,Subversion版本控制系統最初設計者之一。擁有40多年程式設計經驗,其中包括30多年自由軟體發展經驗,曾在GNU Emacs、GNU Debugger等專案上工作。
 
傑生·奧倫多夫(Jason Orendorff),GitHub工程師,專注開發尚未公開的Rust專案,曾在Mozilla參與JavaScript引擎SpiderMonkey的開發。興趣廣泛,包括:語法學、烘焙、時間旅行,以及説明人們理解複雜主題。
 
莉奧諾拉·F. S. 廷德爾(Leonora F. S. Tindall),軟體工程師、類型系統愛好者。她喜歡使用Rust等先進語言在一些關鍵領域構建健壯且適應性強的系統軟體,特別是在醫療保健和資料所有權管理等領域。

 

目錄

專家推薦
譯者序
前言
中文版審讀致謝
第1章 系統程式師也能享受美好 1
1.1 Rust為你負重前行 2
1.2 高效並行程式設計 3
1.3 性能毫不妥協 3
1.4 協作無邊無界 4

第2章 Rust導覽 5
2.1 rustup與Cargo 6
2.2 Rust函數 8
2.3 編寫與運行單元測試 9
2.4 處理命令列參數 10
2.5 搭建Web伺服器 13
2.6 併發 18
2.6.1 什麼是曼德博集 19
2.6.2 解析並配對命令列參數 22
2.6.3 從圖元到複數的映射 24
2.6.4 繪製曼德博集 25
2.6.5 寫入影像檔 26
2.6.6 併發版曼德博程式 27
2.6.7 運行曼德博繪圖器 32
2.6.8 大“安”無形 33
2.7 檔案系統與命令列工具 33
2.7.1 命令列介面 34
2.7.2 讀寫文件 36
2.7.3 查找並替換 37

第3章 基底資料型別 39
3.1 固定寬度的數數值型別 41
3.1.1 整型 42
3.1.2 檢查演算法、回繞演算法、飽和演算法和溢出演算法 45
3.1.3 浮點類型 46
3.2 布林類型 48
3.3 字元 49
3.4 元組 50
3.5 指針類型 51
3.5.1 引用 52
3.5.2 Box 52
3.5.3 裸指針 53
3.6 陣列、向量和切片 53
3.6.1 陣列 53
3.6.2 向量 54
3.6.3 切片 57
3.7 字串類型 58
3.7.1 字串字面量 58
3.7.2 位元組串 59
3.7.3 記憶體中的字串 60
3.7.4 String 61
3.7.5 使用字串 62
3.7.6 其他類似字串的類型 62
3.8 類型別名 63
3.9 前路展望 63

第4章 所有權與移動 64
4.1 所有權 65
4.2 移動 70
4.2.1 更多移動類操作 74
4.2.2 移動與控制流 75
4.2.3 移動與索引內容 75
4.3 Copy類型:關於移動的例外情況 77
4.4 Rc與Arc:共用所有權 80

第5章 引用 83
5.1 對值的引用 84
5.2 使用引用 86
5.2.1 Rust引用與C++引用 87
5.2.2 對引用變數賦值 88
5.2.3 對引用進行引用 88
5.2.4 比較引用 89
5.2.5 引用永不為空 89
5.2.6 借用任意運算式結果值的引用 89
5.2.7 對切片和特型對象的引用 90
5.3 引用安全 90
5.3.1 借用區域變數 91
5.3.2 將引用作為函數參數 93
5.3.3 把引用傳給函數 95
5.3.4 返回引用 95
5.3.5 包含引用的結構體 96
5.3.6 不同的生命週期參數 98
5.3.7 省略生命週期參數 100
5.4 共用與可變 101
5.5 應對複雜物件關係 107

第6章 運算式 109
6.1 運算式語言 109
6.2 優先順序與結合性 110
6.3 塊與分號 112
6.4 聲明 113
6.5 if與match 115
6.5.1 if let 117
6.5.2 迴圈 117
6.6 迴圈中的控制流 119
6.7 return運算式 120
6.8 為什麼Rust中會有loop 121
6.9 函數與方法調用 122
6.10 欄位與元素 123
6.11 引用運算子 124
6.12 算術運算子、按位運算子、比較運算子和邏輯運算子 125
6.13 賦值 125
6.14 類型轉換 126
6.15 閉包 127
6.16 前路展望 127

第7章 錯誤處理 128
7.1 panic 128
7.1.1 展開調用棧 129
7.1.2 中止 130
7.2 Result 130
7.2.1 捕獲錯誤 131
7.2.2 Result類型別名 132
7.2.3 列印錯誤 132
7.2.4 傳播錯誤 134
7.2.5 處理多種Error類型 135
7.2.6 處理“不可能發生”的錯誤 136
7.2.7 忽略錯誤 138
7.2.8 處理main()中的錯誤 138
7.2.9 聲明自訂錯誤類型 139
7.2.10 為什麼是Result 140

第8章 crate與模組 141
8.1 crate 141
8.1.1 版本 144
8.1.2 創建設定檔 145
8.2 模組 145
8.2.1 嵌套模組 146
8.2.2 單獨檔中的模組 147
8.2.3 路徑與導入 149
8.2.4 標準庫預導入 152
8.2.5 公開use聲明 152
8.2.6 公開結構體欄位 152
8.2.7 靜態變數與常量 153
8.3 將程式變成庫 153
8.4 src/bin目錄 155
8.5 屬性 156
8.6 測試與文檔 158
8.6.1 集成測試 161
8.6.2 文檔 161
8.6.3 文檔測試 163
8.7 指定依賴項 166
8.7.1 版本 166
8.7.2 Cargo.lock 167
8.8 將crate發佈到crates.io 168
8.9 工作空間 170
8.10 更多好資源 170

第9章 結構體 172
9.1 具名欄位型結構體 172
9.2 元組型結構體 175
9.3 單元型結構體 175
9.4 結構體佈局 176
9.5 用impl定義方法 177
9.5.1 以Box、Rc或Arc形式傳入self 179
9.5.2 類型關聯函數 179
9.6 關聯常量 180
9.7 泛型結構體 181
9.8 帶生命週期參數的泛型結構體 183
9.9 帶常量參數的泛型結構體 183
9.10 讓結構體類型派生自某些公共特型 185
9.11 內部可變性 186

第10章 枚舉與模式 190
10.1 枚舉 191
10.1.1 帶數據的枚舉 193
10.1.2 記憶體中的枚舉 194
10.1.3 用枚舉表示富資料結構 194
10.1.4 泛型枚舉 196
10.2 模式 198
10.2.1 模式中的字面量、變數和萬用字元 201
10.2.2 元組型模式與結構體型模式 202
10.2.3 陣列型模式與切片型模式 203
10.2.4 引用型模式 204
10.2.5 匹配守衛 206
10.2.6 匹配多種可能性 206
10.2.7 使用@模式綁定 207
10.2.8 模式能用在哪裡 207
10.2.9 填充二叉樹 209
10.3 大局觀 210

第11章 特型與泛型 211
11.1 使用特型 213
11.1.1 特型對象 214
11.1.2 泛型函數與類型參數 215
11.1.3 使用哪一個 219
11.2 定義與實現特型 220
11.2.1 默認方法 221
11.2.2 特型與其他人的類型 222
11.2.3 特型中的Self 224
11.2.4 子特型 225
11.2.5 類型關聯函數 226
11.3 完全限定的方法調用 227
11.4 定義類型之間關係的特型 228
11.4.1 關聯類型(或反覆運算器的工作原理) 229
11.4.2 泛型特型(或運算子重載的工作原理) 231
11.4.3 impl Trait 232
11.4.4 關聯常量 234
11.5 逆向工程求限界 235
11.6 以特型為基礎 238

第12章 運算子重載 239
12.1 算術運算子與按位運算子 240
12.1.1 一元運算子 242
12.1.2 二元運算子 243
12.1.3 複合設定運算子 244
12.2 相等性比較 245
12.3 有序比較 247
12.4 Index與IndexMut 250
12.5 其他運算子 252

第13章 實用工具特型 253
13.1 Drop 254
13.2 Sized 256
13.3 Clone 259
13.4 Copy 260
13.5 Deref與DerefMut 260
13.6 Default 263
13.7 AsRef與AsMut 264
13.8 Borrow與BorrowMut 266
13.9 From與Into 267
13.10 TryFrom與TryInto 270
13.11 ToOwned 271
13.12 Borrow與ToOwned的實際運用:謙卑的Cow 271

第14章 閉包 273
14.1 捕獲變數 274
14.1.1 借用值的閉包 275
14.1.2 “竊取”值的閉包 275
14.2 函數與閉包的類型 277
14.3 閉包性能 279
14.4 閉包與安全 280
14.4.1 “殺死”閉包 280
14.4.2 FnOnce 281
14.4.3 FnMut 282
14.4.4 對閉包的Copy與Clone 284
14.5 回檔 285
14.6 高效地使用閉包 288

第15章 反覆運算器 290
15.1 Iterator特型與IntoIterator特型 291
15.2 創建反覆運算器 292
15.2.1 iter方法與iter_mut方法 293
15.2.2 IntoIterator的實現 293
15.2.3 from_fn與successors 295
15.2.4 drain方法 296
15.2.5 其他反覆運算器源 297
15.3 反覆運算器適配器 298
15.3.1 map與filter 298
15.3.2 filter_map與flat_map 300
15.3.3 flatten 302
15.3.4 take與take_while 304
15.3.5 skip與skip_while 305
15.3.6 peekable 305
15.3.7 fuse 306
15.3.8 可逆反覆運算器與rev 307
15.3.9 inspect 308
15.3.10 chain 309
15.3.11 enumerate 309
15.3.12 zip 310
15.3.13 by_ref 310
15.3.14 cloned與copied 311
15.3.15 cycle 312
15.4 消耗反覆運算器 313
15.4.1 簡單累加:count、sum和product 313
15.4.2 min與max 313
15.4.3 max_by與min_by 314
15.4.4 max_by_key與min_by_key 314
15.4.5 對條目序列進行比較 315
15.4.6 any與all 315
15.4.7 position、rposition和ExactSizeIterator 316
15.4.8 fold與rfold 316
15.4.9 try_fold與try_rfold 317
15.4.10 nth與nth_back 318
15.4.11 last 319
15.4.12 find、rfind和find_map 319
15.4.13 構建集合:collect與FromIterator 320
15.4.14 Extend特型 322
15.4.15 partition 322
15.4.16 for_each與try_for_each 323
15.5 實現自己的反覆運算器 324

第16章 集合 328
16.1 概述 329
16.2 Vec 330
16.2.1 訪問元素 331
16.2.2 反覆運算 332
16.2.3 擴大向量與收縮向量 332
16.2.4 聯結 336
16.2.5 拆分 336
16.2.6 交換 339
16.2.7 填充 339
16.2.8 排序與搜索 339
16.2.9 比較切片 341
16.2.10 隨機元素 341
16.2.11 Rust中不存在失效型錯誤 342
16.3 VecDeque 343
16.4 BinaryHeap 344
16.5 HashMap與BTreeMap 346
16.5.1 條目 349
16.5.2 對Map進行反覆運算 351
16.6 HashSet與BTreeSet 351
16.6.1 對Set進行反覆運算 352
16.6.2 當相等的值不完全相同時 353
16.6.3 針對整個Set的運算 353
16.7 雜湊 354
16.8 使用自訂雜湊演算法 355
16.9 在標準集合之外 357

第17章 字串與文本 358
17.1 一些Unicode背景知識 358
17.1.1 ASCII、Latin-1和Unicode 359
17.1.2 UTF-8編碼 359
17.1.3 文本方向性 361
17.2 字元(char) 361
17.2.1 字元分類 361
17.2.2 處理數位 362
17.2.3 字元大小寫轉換 363
17.2.4 與整數之間的轉換 364
17.3 String與str 364
17.3.1 創建字串值 365
17.3.2 簡單探查 366
17.3.3 追加文本與插入文本 366
17.3.4 移除文本與替換文本 368
17.3.5 搜索與反覆運算的約定 368
17.3.6 搜索文本的模式 369
17.3.7 搜索與替換 370
17.3.8 遍歷文本 371
17.3.9 修剪 373
17.3.10 字串的大小寫轉換 374
17.3.11 從字串中解析出其他類型 374
17.3.12 將其他類型轉換為字串 374
17.3.13 借用其他類似文本的類型 375
17.3.14 以UTF-8格式訪問文本 376
17.3.15 從UTF-8資料生成文本 376
17.3.16 推遲分配 377
17.3.17 把字串當作泛型集合 379
17.4 格式化各種值 379
17.4.1 格式化文字值 380
17.4.2 格式化數值 381
17.4.3 格式化其他類型 383
17.4.4 格式化值以進行調試 383
17.4.5 格式化指針以進行調試 384
17.4.6 按索引或名稱傳址參數 385
17.4.7 動態寬度與動態精度 386
17.4.8 格式化自己的類型 386
17.4.9 在自己的代碼中使用格式化語言 388
17.5 規則運算式 389
17.5.1 Regex的基本用法 389
17.5.2 惰性構建規則運算式值 390
17.6 規範化 391
17.6.1 規範化形式 392
17.6.2 unicode-normalization crate 393

第18章 輸入與輸出 395
18.1 讀取器與寫入器 396
18.1.1 讀取器 397
18.1.2 緩衝讀取器 398
18.1.3 讀取行 399
18.1.4 收集行 401
18.1.5 寫入器 402
18.1.6 文件 403
18.1.7 定址 404
18.1.8 其他讀取器與寫入器類型 404
18.1.9 二進位資料、壓縮和序列化 406
18.2 檔與目錄 407
18.2.1 OsStr與Path 408
18.2.2 Path與PathBuf的方法 409
18.2.3 訪問檔案系統的函數 411
18.2.4 讀取目錄 412
18.2.5 特定於平臺的特性 413
18.3 網路 414

第19章 併發 417
19.1 分叉與合併並行 418
19.1.1 啟動與聯結 420
19.1.2 跨執行緒錯誤處理 422
19.1.3 跨執行緒共用不可變資料 422
19.1.4 rayon 424
19.1.5 重溫曼德博集 426
19.2 通道 427
19.2.1 發送值 429
19.2.2 接收值 431
19.2.3 運行管道 432
19.2.4 通道的特性與性能 434
19.2.5 執行緒安全:Send與Sync 435
19.2.6 絕大多數反覆運算器能通過管道傳給通道 437
19.2.7 除管道之外的用法 438
19.3 共用可變狀態 439
19.3.1 什麼是互斥鎖 439
19.3.2 Mutex 440
19.3.3 mut與互斥鎖 442
19.3.4 為什麼互斥鎖不是“銀彈” 443
19.3.5 鎖死 443
19.3.6 “中毒”的互斥鎖 444
19.3.7 使用互斥鎖的多消費者通道 444
19.3.8 讀/寫鎖(RwLock) 445
19.3.9 條件變數(Condvar) 446
19.3.10 原子化類型 447
19.3.11 全域變數 448
19.4 在Rust中編寫併發代碼的一點兒經驗 451

第20章 非同步程式設計 452
20.1 從同步到非同步 453
20.1.1 Future 455
20.1.2 非同步函數與await運算式 456
20.1.3 從同步代碼調用非同步函數:block_on 458
20.1.4 啟動非同步任務 460
20.1.5 非同步塊 464
20.1.6 從非同步塊構建非同步函數 466
20.1.7 在執行緒池中啟動非同步任務 467
20.1.8 你的Future實現Send了嗎 467
20.1.9 長時間運行的計算:yield_now與spawn_blocking 470
20.1.10 對幾種非同步設計進行比較 471
20.1.11 一個真正的非同步HTTP用戶端 471
20.2 非同步用戶端與伺服器 472
20.2.1 Error類型與Result類型 474
20.2.2 協議 474
20.2.3 獲取用戶輸入:非同步流 475
20.2.4 發送資料包 477
20.2.5 接收資料包:更多非同步流 478
20.2.6 用戶端的main函數 480
20.2.7 伺服器的main函數 481
20.2.8 處理聊天連接:非同步互斥鎖 482
20.2.9 群組表:同步互斥鎖 484
20.2.10 聊天組:tokio的廣播通道 485
20.3 原始Future與執行器:Future什麼時候值得再次輪詢 488
20.3.1 調用喚醒器:spawn_blocking 489
20.3.2 實現block_on 491
20.4 固定(Pin) 493
20.4.1 Future生命週期的兩個階段 493
20.4.2 固定指針 496
20.4.3 Unpin特型 497
20.5 什麼時候要用非同步代碼 498

第21章 宏 500
21.1 宏基礎 501
21.1.1 宏展開的基礎 502
21.1.2 意外後果 503
21.1.3 重複 505
21.2 內置宏 507
21.3 調試宏 508
21.4 構建json!宏 509
21.4.1 片段類型 510
21.4.2 宏中的遞迴 513
21.4.3 將特型與宏一起使用 514
21.4.4 作用域界定與衛生宏 516
21.4.5 導入宏和匯出宏 518
21.5 在匹配過程中避免語法錯誤 519
21.6 超越macro_rules! 520

第22章 不安全代碼 522
22.1 不安全因素來自哪裡 523
22.2 不安全塊 524
22.3 示例:高效的ASCII字串類型 525
22.4 不安全函數 527
22.5 不安全塊還是不安全函數 528
22.6 未定義行為 529
22.7 不安全特型 531
22.8 裸指針 532
22.8.1 安全地解引用裸指針 534
22.8.2 示例:RefWithFlag 535
22.8.3 可空指針 537
22.8.4 類型大小與對齊方式 537
22.8.5 指針運算 538
22.8.6 移動入和移動出記憶體 539
22.8.7 示例:GapBuffer 542
22.8.8 不安全代碼中的panic安全性 548
22.9 用聯合體重新解釋記憶體 549
22.10 匹配聯合體 551
22.11 借用聯合體 551

第23章 外部函數 552
23.1 尋找共同的資料表示 552
23.2 聲明外部函數與變數 556
23.3 使用庫中的函數 557
23.4 libgit2的裸介面 560
23.5 libgit2的安全介面 566
23.6 結論 575
作者介紹 576
封面介紹 576

 

詳細資料

  • ISBN:9787115621818
  • 規格:平裝 / 576頁 / 19 x 26 x 2.88 cm / 普通級 / 1-1
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 從「格」的概念出發|
 

購物說明

溫馨提醒您:若您訂單中有購買簡體館無庫存/預售書或庫存於海外廠商的書籍,建議與其他商品分開下單,以避免等待時間過長,謝謝。

大陸出版品書況:因裝幀品質及貨運條件未臻完善,書況與台灣出版品落差甚大,封面老舊、出現磨痕、凹痕等均屬常態,故簡體字館除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。 

 

請注意,部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

調貨時間:若您購買海外庫存之商品,於您完成訂購後,商品原則上約45個工作天內抵台(若有將延遲另行告知)。為了縮短等待的時間,建議您將簡體書與其它商品分開訂購,以利一般商品快速出貨。 

若您具有法人身份為常態性且大量購書者,或有特殊作業需求,建議您可洽詢「企業採購」。 

退換貨說明 

會員所購買的商品均享有到貨十天的猶豫期(含例假日)。退回之商品必須於猶豫期內寄回。 

辦理退換貨時,商品必須是全新狀態與完整包裝(請注意保持商品本體、配件、贈品、保證書、原廠包裝及所有附隨文件或資料的完整性,切勿缺漏任何配件或損毀原廠外盒)。退回商品無法回復原狀者,恐將影響退貨權益或需負擔部分費用。 

訂購本商品前請務必詳閱商品退換貨原則

  • 翦商作者新作79折
  • 針灸匠張寶旬
  • 浪漫小說精選3本72折