新到貨2本75折
Rust權威指南

Rust權威指南

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

內容簡介

本書由Rust核心開發團隊編寫而成,由淺入深地探討了Rust語言的方方面面。從學習函數、選擇資料結構及綁定變數入手,逐步介紹所有權、trait、生命週期、安全保證等高級概念,模式匹配、錯誤處理、包管理、函數式特性、併發機制等實用工具,以及兩個完整的專案開發實戰案例。

作為開源的系統級編程語言,Rust可以説明你編寫出更為快速且更為可靠的軟體,在給予開發者底層控制能力的同時,通過深思熟慮的工程設計避免了傳統語言帶來的諸多麻煩。 本書被視為Rust開發工作的必讀書目,適合所有希望評估、入門、提高和研究Rust語言的軟體發展人員閱讀。
 

作者介紹

Steve Klabnik
 
Rust文檔團隊負責人,Rust核心開發者之一,Rust佈道者及高產的開源貢獻者,此前致力於Ruby等專案的開發。毛靖凱,遊戲設計師,一直專注於遊戲領域研發,曾負責設計和維護了多個商業遊戲的基礎框架。業餘時間活躍於Rust開源社區,並嘗試使用Rust來解決遊戲領域中的諸多問題。
 
唐剛
 
資深開發者,Rustcc社區創始人和維護者之一。目前就職於Cdot Network。使用Rust從事區塊鏈共識協議的開發工作。
 
沙渺
 
嵌入式開發者,國內Rust語言社區和Raspberry Pi(樹莓派)開發社區早期參與者。負責維護多個RISC-V架構硬體平臺的基礎函式程式庫。 Carol Nichols,Rust核心團隊成員,i32、LLC聯合構建者,Rust Belt Rust會議組織者。
 

目錄

第1章  入門指南 1
安裝 1
在Linux或macOS環境中安裝Rust 2
在Windows環境中安裝Rust 3
更新與卸載 4
常見問題 4
本地文檔 4
Hello, World! 5
創建一個資料夾 5
編寫並運行一個Rust程式 6
對這個程式的剖析 7
編譯與運行是兩個不同的步驟 8
Hello, Cargo! 10
使用Cargo創建一個項目 10
使用Cargo構建和運行專案 13
以Release模式進行構建 15
學會習慣Cargo 15
總結 16

第2章  編寫一個猜數遊戲 17
創建一個新的項目 18
處理一次猜測 19
使用變數來存儲值 20
使用Result類型來處理可能失敗的情況 22
通過println!中的預留位置輸出對應的值 24
嘗試運行代碼 24
生成一個保密數字 25
借助包來獲得更多功能 25
生成一個亂數 28
比較猜測數位與保密數位 31
使用迴圈來實現多次猜測 35
在猜測成功時優雅地退出 37
處理非法輸入 38
總結 40

第3章  通用程式設計概念 42
變數與可變性 43
變數與常量之間的不同 46
隱藏 47
資料類型 48
標量類型 49
複合類型 54
函數 58
函數參數 60
函數體中的語句和運算式 61
函數的返回值 63
注釋 66
控制流 67
if運算式 67
使用迴圈重複執行代碼 72
總結 78

第4章  認識所有權 79
什麼是所有權 79
所有權規則 82
變數作用域 82
String類型 83
記憶體與分配 84
所有權與函數 91
返回值與作用域 92
引用與借用 94
可變引用 96
懸垂引用 99
引用的規則 101
切片 101
字串切片 104
其他類型的切片 109
總結 109

第5章  使用結構體來組織相關聯的資料 111
定義並產生實體結構體 112
在變數名與欄位名相同時使用簡化版的欄位初始化方法 114
使用結構體更新語法根據其他實例創建新實例 114
使用不需要對欄位元命名的元組結構體來創建不同的類型 115
沒有任何欄位的空結構體 116
一個使用結構體的示例程式 118
使用元組來重構代碼 119
使用結構體來重構代碼:增加有意義的描述資訊 120
通過派生trait增加實用功能 121
方法 124
定義方法 124
帶有更多參數的方法 127
關聯函數 128
多個impl塊 129
總結 129

第6章  枚舉與模式匹配 130
定義枚舉 131
枚舉值 131
Option枚舉及其在空值處理方面的優勢 136
控制流運運算元match 140
綁定值的模式 142
匹配Option<T> 143
匹配必須窮舉所有的可能 145
_萬用字元 146
簡單控制流if let 146
總結 148

第7章  使用包、單元包及模組來管理日漸複雜的專案 150
包與單元包 152
通過定義模組來控制作用域及私有性 153
用於在模組樹中指明條目的路徑 156
使用pub關鍵字來暴露路徑 159
使用super關鍵字開始構造相對路徑 161
將結構體或枚舉聲明為公共的 162
用use關鍵字將路徑導入作用域 165
創建use路徑時的慣用模式 166
使用as關鍵字來提供新的名稱 168
使用pub use重匯出名稱 169
使用外部包 170
使用嵌套的路徑來清理眾多use語句 171
萬用字元 172
將模組拆分為不同的檔 172
總結 174

第8章  通用集合類型 175
使用動態陣列存儲多個值 176
創建動態陣列 176
更新動態陣列 177
銷毀動態陣列時也會銷毀其中的元素 177
讀取動態陣列中的元素 178
遍歷動態陣列中的值 181
使用枚舉來存儲多個類型的值 181
使用字串存儲UTF-8編碼的文本 183
字串是什麼 183
創建一個新的字串 184
更新字串 185
字串索引 188
字串切片 191
遍歷字串的方法 192
字串的確沒那麼簡單 193
在雜湊映射中存儲鍵值對 193
創建一個新的雜湊映射 194
雜湊映射與所有權 195
訪問雜湊映射中的值 196
更新雜湊映射 197
雜湊函數 199
總結 200

第9章  錯誤處理 201
不可修復錯誤與panic! 202
使用panic!產生的回溯資訊 203
可修復錯誤與Result 207
匹配不同的錯誤 210
失敗時觸發panic的快捷方式:unwrap和expect 212
傳播錯誤 213
要不要使用panic! 219
示例、原型和測試 220
當你比編譯器擁有更多資訊時 220
錯誤處理的指導原則 221
創建自訂類型來進行有效性驗證 222
總結 225

第10章  泛型、trait與生命週期 226
通過將代碼提取為函數來減少重複工作 227
泛型資料類型 230
在函式定義中 230
在結構體定義中 234
在枚舉定義中 236
在方法定義中 237
泛型代碼的性能問題 239
trait:定義共用行為 241
定義trait 241
為類型實現trait 242
默認實現 245
使用trait作為參數 247
返回實現了trait的類型 249
使用trait約束來修復largest函數 251
使用trait約束來有條件地實現方法 254
使用生命週期保證引用的有效性 256
使用生命週期來避免懸垂引用 256
借用檢查器 257
函數中的泛型生命週期 259
生命週期標注語法 260
函數簽名中的生命週期標注 261
深入理解生命週期 264
結構體定義中的生命週期標注 266
生命週期省略 267
方法定義中的生命週期標注 270
靜態生命週期 271
同時使用泛型參數、trait約束與生命週期 272
總結 273

第11章  編寫自動化測試 274
如何編寫測試 275
測試函數的構成 275
使用assert!宏檢查結果 280
使用assert_eq!宏和assert_ne!宏判斷相等性 284
添加自訂的錯誤提示資訊 287
使用should_panic檢查panic 289
使用Result<T, E>編寫測試 294
控制測試的運行方式 295
並行或串列地進行測試 296
顯示函數輸出 296
只運行部分特定名稱的測試 299
通過顯式指定來忽略某些測試 301
測試的組織結構 303
單元測試 303
集成測試 305
總結 311

第12章  I/O項目:編寫一個命令列程式 312
接收命令列參數 313
讀取參數值 314
將參數值存入變數 316
讀取文件 317
重構代碼以增強模組化程度和錯誤處理能力 319
二進位專案的關注點分離 320
修復錯誤處理邏輯 325
從main中分離邏輯 330
將代碼分離為獨立的代碼包 333
使用測試驅動開發來編寫庫功能 335
編寫一個會失敗的測試 336
編寫可以通過測試的代碼 339
處理環境變數 343
為不區分大小寫的search函數編寫一個會失敗的測試 343
實現search_case_insensitive函數 345

將錯誤提示資訊列印到標準錯誤而不是標準輸出 349
確認錯誤被寫到了哪裡 350
將錯誤提示資訊列印到標準錯誤 351
總結 352

第13章  函數式語言特性:反覆運算器與閉包 353
閉包:能夠捕獲環境的匿名函數 354
使用閉包來創建抽象化的程式列為 354
閉包的類型推斷和類型標注 361
使用泛型參數和Fn trait來存儲閉包 363
Cacher實現的局限性 367
使用閉包捕獲上下文環境 368
使用反覆運算器處理元素序列 371
Iterator trait和next方法 373
消耗反覆運算器的方法 374
生成其他反覆運算器的方法 375
使用閉包捕獲環境 376
使用Iterator trait來創建自訂反覆運算器 378
改進I/O專案 381
使用反覆運算器代替clone 381
使用反覆運算器適配器讓代碼更加清晰 385
比較迴圈和反覆運算器的性能 386
總結 388

第14章  進一步認識Cargo及crates.io 390
使用發佈配置來定制構建 391
將包發佈到crates.io上 392
編寫有用的文檔注釋 393
使用pub use來匯出合適的公共API 397
創建crates.io帳戶 401
為包添加中繼資料 401
發佈到crates.io 403
發佈已有包的新版本 404
使用cargo yank命令從cargo.io上移除版本 404
Cargo工作空間 405
創建工作空間 405
在工作空間中創建第二個包 407
使用cargo install從crates.io上安裝可執行程式 413
使用自訂命令擴展Cargo的功能 414
總結 414

第15章  智能指針 415
使用Box<T>在堆上分配資料 417
使用Box<T>在堆上存儲資料 417
使用裝箱定義遞迴類型 418
通過Deref trait將智慧指針視作常規引用 423
使用解引用運運算元跳轉到指標指向的值 424
把Box<T>當成引用來操作 425
定義我們自己的智慧指標 426
通過實現Deref trait來將類型視作引用 427
函數和方法的隱式解引用轉換 428
解引用轉換與可變性 430
借助Drop trait在清理時運行代碼 431
使用std::mem::drop提前丟棄值 433
基於引用計數的智慧指針Rc<T> 435
使用Rc<T>共用資料 436
克隆Rc<T>會增加引用計數 439
RefCell<T>和內部可變性模式 440
使用RefCell<T>在運行時檢查借用規則 441
內部可變性:可變地借用一個不可變的值 442
將Rc<T>和RefCell<T>結合使用來實現一個擁有多重所有權的可變資料 450
迴圈引用會造成記憶體洩漏 452
創建迴圈引用 453
使用Weak<T>代替Rc<T>來避免迴圈引用 456
總結 463

第16章  無畏併發 464
使用執行緒同時運行代碼 466
使用spawn創建新執行緒 467
使用join控制碼等待所有執行緒結束 469
在執行緒中使用move閉包 471
使用消息傳遞在執行緒間轉移資料 475
通道和所有權轉移 478
發送多個值並觀察接收者的等待過程 480
通過克隆發送者創建多個生產者 481
共用狀態的併發 483
互斥體一次只允許一個執行緒訪問資料 484
RefCell<T>/Rc<T>和Mutex<T>/Arc<T>之間的相似性 493
使用Sync trait和Send trait對併發進行擴展 494
允許執行緒間轉移所有權的Send trait 494
允許多執行緒同時訪問的Sync trait 495
手動實現Send和Sync是不安全的 495
總結 495

第17章  Rust的物件導向程式設計特性 497
物件導向語言的特性 497
物件包含資料和行為 498
封裝實現細節 498
作為類型系統和代碼共用機制的繼承 500
使用trait物件來存儲不同類型的值 502
為共有行為定義一個trait 503
實現trait 505
trait物件會執行動態派發 509
trait物件必須保證物件安全 510
實現一種物件導向的設計模式 511
定義Post並新建一個處於草稿狀態下的新實例 513
存儲文章內容的文本 514
確保草稿的可讀內容為空 515
請求審批文章並改變其狀態 516
添加approve方法來改變content的行為 518
狀態模式的權衡取捨 521
總結 527

第18章  模式匹配 529
所有可以使用模式的場合 530
match分支 530
if let條件運算式 531
while let條件迴圈 533
for迴圈 533
let語句 534
函數的參數 536
可失敗性:模式是否會匹配失敗 537
模式語法 539
匹配字面量 539
匹配命名變數 540
多重模式 541
使用...來匹配值區間 542
使用解構來分解值 543
忽略模式中的值 548
使用匹配守衛添加額外條件 554
@綁定 556
總結 557

第19章  高級特性 559
不安全Rust 560
不安全超能力 561
解引用裸指針 562
調用不安全函數或方法 564
訪問或修改一個可變靜態變數 570
實現不安全trait 572
使用不安全代碼的時機 573
高級trait 573
在trait的定義中使用關聯類型指定占位類型 573
默認泛型參數和運運算元重載 575
用於消除歧義的完全限定語法:調用相同名稱的方法 578
用於在trait中附帶另外一個trait功能的超trait 582
使用newtype模式在外部類型上實現外部trait 585
高級類型 586
使用newtype模式實現類型安全與抽象 587
使用類型別名創建同義類型 587
永不返回的Never類型 590
動態大小類型和Sized trait 593
高級函數與閉包 595
函數指標 595
返回閉包 598
宏 599
巨集與函數之間的差別 599
用於通用元程式設計的macro_rules!聲明宏 600
基於屬性創建代碼的過程巨集 603
如何編寫一個自訂derive宏 604
屬性巨集 611
函數巨集 611
總結 612

第20章  最後的項目:構建多執行緒Web伺服器 613
構建單執行緒Web伺服器 614
監聽TCP連接 615
讀取請求 617
仔細觀察HTTP請求 620
編寫回應 621
返回真正的HTML 622
驗證請求有效性並選擇性地回應 624
少許重構 626
把單執行緒伺服器修改為多執行緒伺服器 628
在現有的伺服器實現中模擬一個慢請求 628
使用執行緒池改進輸送量 629
優雅地停機與清理 652
為ThreadPool實現Drop trait 652
通知執行緒停止監聽任務 655
總結 661

附錄A  關鍵字 662
當前正在使用的關鍵字 662
將來可能會使用的保留關鍵字 664
原始識別字 665

附錄B  運運算元和符號 667
運運算元 667
非運運算元符號 669

附錄C  可派生trait 673
面向程式師格式化輸出的Debug 674
用於相等性比較的PartialEq和Eq 675
使用PartialOrd和Ord進行次序比較 675
使用Clone和Copy複製值 676
用於將值映射到另外一個長度固定的值的Hash 677
用於提供預設值的Default 678

附錄D  有用的開發工具 679
使用rustfmt自動格式化代碼 679
使用rustfix修復代碼 680
使用Clippy完成更多的代碼分析 681
使用Rust語言伺服器來集成IDE 683

附錄E  版本 684
 

雖然不是那麼明顯,但Rust編程語言的核心在於賦能:無論你正在編寫什麼樣的代碼,Rust賦予的能力都可以幫助你走得更遠,並使你可以在更為廣闊的領域中充滿自信地編寫程式。

例如,完成某些“系統層面”的工作需要處理記內存管理、數據佈局及併發的底層細節。我們習慣於將這些領域內的編程視作某種神秘的魔法,只有少部分被選中的專家才能真正深入其中。他們需要投入數年的時間來學習如何避免該領域內那些臭名昭著的陷阱,但即便是□為謹慎的實踐者,也無法避免自己的代碼出現漏洞、崩潰或損壞。

通過消滅這些陳舊的缺陷並提供一系列友好、精良的開發工具,Rust極大地降低了相關領域的門檻。需要“深入”底層控制的程式師可以使用Rust來完成任務,而無須承受那些常見的崩潰或安全性風險,也無須持續學習那些不斷更新的工具鏈。更妙的是,這門語言旨在引導你自然而然地編寫出可靠的代碼,這些代碼可以高效地運行並運用記內存。

擁有底層代碼編寫經驗的開發者可以使用Rust來實現“更具野心”的項目。例如,在Rust中引入並行是一種相對低風險的操作:編譯器會為你捕捉那些常見的經典錯誤。你可以在代碼中採用更為激進的優化策略,而無須擔心意外地引發崩潰或引入漏洞。

但Rust的用途並不單單局限於底層系統編程,它極強的表達能力及工作效率足以幫助你輕鬆地編寫出CLI應用、Web伺服器及許多其他類型的代碼——你會在本書中看到前兩個領域內的簡單示例。使用Rust還意味著你能夠在不同的領域中構建相同的技能體系;你可以編寫Web應用來學習Rust,並將這些技能應用到樹莓派(Raspberry Pi)上。

本書全面地介紹了Rust賦予用戶的諸多可能性,它採用了通俗易懂的語言以期説明你理解有關Rust的知識。除此之外,本書還能從整體上提升你對編程的理解和信心。讓我們一起來打開新世界的大門吧!歡迎加入Rust社區!
 
 

詳細資料

  • ISBN:9787121387067
  • 規格:平裝 / 686頁 / 16k / 19 x 26 x 3.43 cm / 普通級 / 單色印刷 / 初版
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 【其他】2024采實電子書全書系:春暖花開‧享閱讀,參展書單書85折起、任選3本79折
 

購物說明

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

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

 

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

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

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

退換貨說明 

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

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

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

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