注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計Rust權(quán)威指南

Rust權(quán)威指南

Rust權(quán)威指南

定 價:¥159.00

作 者: [美] 史蒂夫?克拉伯尼克,卡羅爾?尼科爾斯 著,毛靖凱 譯
出版社: 電子工業(yè)出版社
叢編項:
標(biāo) 簽: 暫缺

ISBN: 9787121387067 出版時間: 2020-05-01 包裝: 平裝
開本: 16開 頁數(shù): 716 字?jǐn)?shù):  

內(nèi)容簡介

  本書由Rust核心開發(fā)團隊編寫而成,由淺入深地探討了Rust語言的方方面面。從學(xué)習(xí)函數(shù)、選擇數(shù)據(jù)結(jié)構(gòu)及綁定變量入手,逐步介紹所有權(quán)、trait、生命周期、安全保證等高級概念,模式匹配、錯誤處理、包管理、函數(shù)式特性、并發(fā)機制等實用工具,以及兩個完整的項目開發(fā)實戰(zhàn)案例。 作為開源的系統(tǒng)級編程語言,Rust可以幫助你編寫出更為快速且更為可靠的軟件,在給予開發(fā)者底層控制能力的同時,通過深思熟慮的工程設(shè)計避免了傳統(tǒng)語言帶來的諸多麻煩。 本書被視為Rust開發(fā)工作的必讀書目,適合所有希望評估、入門、提高和研究Rust語言的軟件開發(fā)人員閱讀。

作者簡介

  Steve Klabnik,Rust文檔團隊負責(zé)人,Rust核心開發(fā)者之一,Rust布道者及高產(chǎn)的開源貢獻者,此前致力于Ruby等項目的開發(fā)。Carol Nichols,Rust核心團隊成員,i32、LLC聯(lián)合構(gòu)建者,Rust Belt Rust會議組織者。毛靖凱,游戲設(shè)計師,一直專注于游戲領(lǐng)域研發(fā),曾負責(zé)設(shè)計和維護了多個商業(yè)游戲的基礎(chǔ)框架。業(yè)余時間活躍于Rust開源社區(qū),并嘗試使用Rust來解決游戲領(lǐng)域中的諸多問題。唐剛,資深開發(fā)者,Rustcc社區(qū)創(chuàng)始人和維護者之一。目前就職于Cdot Network。使用Rust從事區(qū)塊鏈共識協(xié)議的開發(fā)工作。沙渺,嵌入式開發(fā)者,國內(nèi)Rust語言社區(qū)和Raspberry Pi(樹莓派)開發(fā)社區(qū)早期參與者。負責(zé)維護多個RISC-V架構(gòu)硬件平臺的基礎(chǔ)函數(shù)庫。

圖書目錄

目 錄
第1章 入門指南\t1
安裝\t1
在Linux或macOS環(huán)境中安裝Rust\t2
在Windows環(huán)境中安裝Rust\t3
更新與卸載\t4
常見問題\t4
本地文檔\t4
Hello, World!\t5
創(chuàng)建一個文件夾\t5
編寫并運行一個Rust程序\t6
對這個程序的剖析\t7
編譯與運行是兩個不同的步驟\t8
Hello, Cargo!\t10
使用Cargo創(chuàng)建一個項目\t10
使用Cargo構(gòu)建和運行項目\t13
以Release模式進行構(gòu)建\t15
學(xué)會習(xí)慣Cargo\t15
總結(jié)\t16
第2章 編寫一個猜數(shù)游戲\t17
創(chuàng)建一個新的項目\t18
處理一次猜測\t19
使用變量來存儲值\t20
使用Result類型來處理可能失敗的情況\t22
通過println!中的占位符輸出對應(yīng)的值\t24
嘗試運行代碼\t24
生成一個保密數(shù)字\t25
借助包來獲得更多功能\t25
生成一個隨機數(shù)\t28
比較猜測數(shù)字與保密數(shù)字\t31
使用循環(huán)來實現(xiàn)多次猜測\t35
在猜測成功時優(yōu)雅地退出\t37
處理非法輸入\t38
總結(jié)\t40
第3章 通用編程概念\t42
變量與可變性\t43
變量與常量之間的不同\t46
隱藏\t47
數(shù)據(jù)類型\t48
標(biāo)量類型\t49
復(fù)合類型\t54
函數(shù)\t58
函數(shù)參數(shù)\t60
函數(shù)體中的語句和表達式\t61
函數(shù)的返回值\t63
注釋\t66
控制流\t67
if表達式\t67
使用循環(huán)重復(fù)執(zhí)行代碼\t72
總結(jié)\t78
第4章 認識所有權(quán)\t79
什么是所有權(quán)\t79
所有權(quán)規(guī)則\t82
變量作用域\t82
String類型\t83
內(nèi)存與分配\t84
所有權(quán)與函數(shù)\t91
返回值與作用域\t92
引用與借用\t94
可變引用\t96
懸垂引用\t99
引用的規(guī)則\t101
切片\t101
字符串切片\t104
其他類型的切片\t109
總結(jié)\t109
第5章 使用結(jié)構(gòu)體來組織相關(guān)聯(lián)的數(shù)據(jù)\t111
定義并實例化結(jié)構(gòu)體\t112
在變量名與字段名相同時使用簡化版的字段初始化方法\t114
使用結(jié)構(gòu)體更新語法根據(jù)其他實例創(chuàng)建新實例\t114
使用不需要對字段命名的元組結(jié)構(gòu)體來創(chuàng)建不同的類型\t115
沒有任何字段的空結(jié)構(gòu)體\t116
一個使用結(jié)構(gòu)體的示例程序\t118
使用元組來重構(gòu)代碼\t119
使用結(jié)構(gòu)體來重構(gòu)代碼:增加有意義的描述信息\t120
通過派生trait增加實用功能\t121
方法\t124
定義方法\t124
帶有更多參數(shù)的方法\t127
關(guān)聯(lián)函數(shù)\t128
多個impl塊\t129
總結(jié)\t129
第6章 枚舉與模式匹配\t130
定義枚舉\t131
枚舉值\t131
Option枚舉及其在空值處理方面的優(yōu)勢\t136
控制流運算符match\t140
綁定值的模式\t142
匹配Option<T>\t143
匹配必須窮舉所有的可能\t145
_通配符\t146
簡單控制流if let\t146
總結(jié)\t148
第7章 使用包、單元包及模塊來管理日漸復(fù)雜的項目\t150
包與單元包\t152
通過定義模塊來控制作用域及私有性\t153
用于在模塊樹中指明條目的路徑\t156
使用pub關(guān)鍵字來暴露路徑\t159
使用super關(guān)鍵字開始構(gòu)造相對路徑\t161
將結(jié)構(gòu)體或枚舉聲明為公共的\t162
用use關(guān)鍵字將路徑導(dǎo)入作用域\t165
創(chuàng)建use路徑時的慣用模式\t166
使用as關(guān)鍵字來提供新的名稱\t168
使用pub use重導(dǎo)出名稱\t169
使用外部包\t170
使用嵌套的路徑來清理眾多use語句\t171
通配符\t172
將模塊拆分為不同的文件\t172
總結(jié)\t174
第8章 通用集合類型\t175
使用動態(tài)數(shù)組存儲多個值\t176
創(chuàng)建動態(tài)數(shù)組\t176
更新動態(tài)數(shù)組\t177
銷毀動態(tài)數(shù)組時也會銷毀其中的元素\t177
讀取動態(tài)數(shù)組中的元素\t178
遍歷動態(tài)數(shù)組中的值\t181
使用枚舉來存儲多個類型的值\t181
使用字符串存儲UTF-8編碼的文本\t183
字符串是什么\t183
創(chuàng)建一個新的字符串\t184
更新字符串\t185
字符串索引\t188
字符串切片\t191
遍歷字符串的方法\t192
字符串的確沒那么簡單\t193
在哈希映射中存儲鍵值對\t193
創(chuàng)建一個新的哈希映射\t194
哈希映射與所有權(quán)\t195
訪問哈希映射中的值\t196
更新哈希映射\t197
哈希函數(shù)\t199
總結(jié)\t200
第9章 錯誤處理\t201
不可恢復(fù)錯誤與panic!\t202
使用panic!產(chǎn)生的回溯信息\t203
可恢復(fù)錯誤與Result\t207
匹配不同的錯誤\t210
失敗時觸發(fā)panic的快捷方式:unwrap和expect\t212
傳播錯誤\t213
要不要使用panic!\t219
示例、原型和測試\t220
當(dāng)你比編譯器擁有更多信息時\t220
錯誤處理的指導(dǎo)原則\t221
創(chuàng)建自定義類型來進行有效性驗證\t222
總結(jié)\t225
第10章 泛型、trait與生命周期\t226
通過將代碼提取為函數(shù)來減少重復(fù)工作\t227
泛型數(shù)據(jù)類型\t230
在函數(shù)定義中\(zhòng)t230
在結(jié)構(gòu)體定義中\(zhòng)t234
在枚舉定義中\(zhòng)t236
在方法定義中\(zhòng)t237
泛型代碼的性能問題\t239
trait:定義共享行為\t241
定義trait\t241
為類型實現(xiàn)trait\t242
默認實現(xiàn)\t245
使用trait作為參數(shù)\t247
返回實現(xiàn)了trait的類型\t249
使用trait約束來修復(fù)largest函數(shù)\t251
使用trait約束來有條件地實現(xiàn)方法\t254
使用生命周期保證引用的有效性\t256
使用生命周期來避免懸垂引用\t256
借用檢查器\t257
函數(shù)中的泛型生命周期\t259
生命周期標(biāo)注語法\t260
函數(shù)簽名中的生命周期標(biāo)注\t261
深入理解生命周期\t264
結(jié)構(gòu)體定義中的生命周期標(biāo)注\t266
生命周期省略\t267
方法定義中的生命周期標(biāo)注\t270
靜態(tài)生命周期\t271
同時使用泛型參數(shù)、trait約束與生命周期\t272
總結(jié)\t273
第11章 編寫自動化測試\t274
如何編寫測試\t275
測試函數(shù)的構(gòu)成\t275
使用assert!宏檢查結(jié)果\t280
使用assert_eq!宏和assert_ne!宏判斷相等性\t284
添加自定義的錯誤提示信息\t287
使用should_panic檢查panic\t289
使用Result<T, E>編寫測試\t294
控制測試的運行方式\t295
并行或串行地進行測試\t296
顯示函數(shù)輸出\t296
只運行部分特定名稱的測試\t299
通過顯式指定來忽略某些測試\t301
測試的組織結(jié)構(gòu)\t303
單元測試\t303
集成測試\t305
總結(jié)\t311
第12章 I/O項目:編寫一個命令行程序\t312
接收命令行參數(shù)\t313
讀取參數(shù)值\t314
將參數(shù)值存入變量\t316
讀取文件\t317
重構(gòu)代碼以增強模塊化程度和錯誤處理能力\t319
二進制項目的關(guān)注點分離\t320
修復(fù)錯誤處理邏輯\t325
從main中分離邏輯\t330
將代碼分離為獨立的代碼包\t333
使用測試驅(qū)動開發(fā)來編寫庫功能\t335
編寫一個會失敗的測試\t336
編寫可以通過測試的代碼\t339
處理環(huán)境變量\t343
為不區(qū)分大小寫的search函數(shù)編寫一個會失敗的測試\t343
實現(xiàn)search_case_insensitive函數(shù)\t345
將錯誤提示信息打印到標(biāo)準(zhǔn)錯誤而不是標(biāo)準(zhǔn)輸出\t349
確認錯誤被寫到了哪里\t350
將錯誤提示信息打印到標(biāo)準(zhǔn)錯誤\t351
總結(jié)\t352
第13章 函數(shù)式語言特性:迭代器與閉包\t353
閉包:能夠捕獲環(huán)境的匿名函數(shù)\t354
使用閉包來創(chuàng)建抽象化的程序行為\t354
閉包的類型推斷和類型標(biāo)注\t361
使用泛型參數(shù)和Fn trait來存儲閉包\t363
Cacher實現(xiàn)的局限性\t367
使用閉包捕獲上下文環(huán)境\t368
使用迭代器處理元素序列\(zhòng)t371
Iterator trait和next方法\t373
消耗迭代器的方法\t374
生成其他迭代器的方法\t375
使用閉包捕獲環(huán)境\t376
使用Iterator trait來創(chuàng)建自定義迭代器\t378
改進I/O項目\t381
使用迭代器代替clone\t381
使用迭代器適配器讓代碼更加清晰\t385
比較循環(huán)和迭代器的性能\t386
總結(jié)\t388
第14章 進一步認識Cargo及crates.io\t390
使用發(fā)布配置來定制構(gòu)建\t391
將包發(fā)布到crates.io上\t392
編寫有用的文檔注釋\t393
使用pub use來導(dǎo)出合適的公共API\t397
創(chuàng)建crates.io賬戶\t401
為包添加元數(shù)據(jù)\t401
發(fā)布到crates.io\t403
發(fā)布已有包的新版本\t404
使用cargo yank命令從cargo.io上移除版本\t404
Cargo工作空間\t405
創(chuàng)建工作空間\t405
在工作空間中創(chuàng)建第二個包\t407
使用cargo install從crates.io上安裝可執(zhí)行程序\t413
使用自定義命令擴展Cargo的功能\t414
總結(jié)\t414
第15章 智能指針\t415
使用Box<T>在堆上分配數(shù)據(jù)\t417
使用Box<T>在堆上存儲數(shù)據(jù)\t417
使用裝箱定義遞歸類型\t418
通過Deref trait將智能指針視作常規(guī)引用\t423
使用解引用運算符跳轉(zhuǎn)到指針指向的值\t424
把Box<T>當(dāng)成引用來操作\t425
定義我們自己的智能指針\t426
通過實現(xiàn)Deref trait來將類型視作引用\t427
函數(shù)和方法的隱式解引用轉(zhuǎn)換\t428
解引用轉(zhuǎn)換與可變性\t430
借助Drop trait在清理時運行代碼\t431
使用std::mem::drop提前丟棄值\t433
基于引用計數(shù)的智能指針Rc<T>\t435
使用Rc<T>共享數(shù)據(jù)\t436
克隆Rc<T>會增加引用計數(shù)\t439
RefCell<T>和內(nèi)部可變性模式\t440
使用RefCell<T>在運行時檢查借用規(guī)則\t441
內(nèi)部可變性:可變地借用一個不可變的值\t442
將Rc<T>和RefCell<T>結(jié)合使用來實現(xiàn)一個擁有多重所有權(quán)的可變數(shù)據(jù)\t450
循環(huán)引用會造成內(nèi)存泄漏\t452
創(chuàng)建循環(huán)引用\t453
使用Weak<T>代替Rc<T>來避免循環(huán)引用\t456
總結(jié)\t463
第16章 無畏并發(fā)\t464
使用線程同時運行代碼\t466
使用spawn創(chuàng)建新線程\t467
使用join句柄等待所有線程結(jié)束\t469
在線程中使用move閉包\t471
使用消息傳遞在線程間轉(zhuǎn)移數(shù)據(jù)\t475
通道和所有權(quán)轉(zhuǎn)移\t478
發(fā)送多個值并觀察接收者的等待過程\t480
通過克隆發(fā)送者創(chuàng)建多個生產(chǎn)者\t481
共享狀態(tài)的并發(fā)\t483
互斥體一次只允許一個線程訪問數(shù)據(jù)\t484
RefCell<T>/Rc<T>和Mutex<T>/Arc<T>之間的相似性\t493
使用Sync trait和Send trait對并發(fā)進行擴展\t494
允許線程間轉(zhuǎn)移所有權(quán)的Send trait\t494
允許多線程同時訪問的Sync trait\t495
手動實現(xiàn)Send和Sync是不安全的\t495
總結(jié)\t495
第17章 Rust的面向?qū)ο缶幊烫匦診t497
面向?qū)ο笳Z言的特性\t497
對象包含數(shù)據(jù)和行為\t498
封裝實現(xiàn)細節(jié)\t498
作為類型系統(tǒng)和代碼共享機制的繼承\(zhòng)t500
使用trait對象來存儲不同類型的值\t502
為共有行為定義一個trait\t503
實現(xiàn)trait\t505
trait對象會執(zhí)行動態(tài)派發(fā)\t509
trait對象必須保證對象安全\t510
實現(xiàn)一種面向?qū)ο蟮脑O(shè)計模式\t511
定義Post并新建一個處于草稿狀態(tài)下的新實例\t513
存儲文章內(nèi)容的文本\t514
確保草稿的可讀內(nèi)容為空\t515
請求審批文章并改變其狀態(tài)\t516
添加approve方法來改變content的行為\t518
狀態(tài)模式的權(quán)衡取舍\t521
總結(jié)\t527
第18章 模式匹配\t529
所有可以使用模式的場合\t530
match分支\t530
if let條件表達式\t531
while let條件循環(huán)\t533
for循環(huán)\t533
let語句\t534
函數(shù)的參數(shù)\t536
可失敗性:模式是否會匹配失敗\t537
模式語法\t539
匹配字面量\t539
匹配命名變量\t540
多重模式\t541
使用...來匹配值區(qū)間\t542
使用解構(gòu)來分解值\t543
忽略模式中的值\t548
使用匹配守衛(wèi)添加額外條件\t554
@綁定\t556
總結(jié)\t557
第19章 高級特性\t559
不安全Rust\t560
不安全超能力\t561
解引用裸指針\t562
調(diào)用不安全函數(shù)或方法\t564
訪問或修改一個可變靜態(tài)變量\t570
實現(xiàn)不安全trait\t572
使用不安全代碼的時機\t573
高級trait\t573
在trait的定義中使用關(guān)聯(lián)類型指定占位類型\t573
默認泛型參數(shù)和運算符重載\t575
用于消除歧義的完全限定語法:調(diào)用相同名稱的方法\t578
用于在trait中附帶另外一個trait功能的超trait\t582
使用newtype模式在外部類型上實現(xiàn)外部trait\t585
高級類型\t586
使用newtype模式實現(xiàn)類型安全與抽象\t587
使用類型別名創(chuàng)建同義類型\t587
永不返回的Never類型\t590
動態(tài)大小類型和Sized trait\t593
高級函數(shù)與閉包\t595
函數(shù)指針\t595
返回閉包\t598
宏\t599
宏與函數(shù)之間的差別\t599
用于通用元編程的macro_rules!聲明宏\t600
基于屬性創(chuàng)建代碼的過程宏\t603
如何編寫一個自定義derive宏\t604
屬性宏\t611
函數(shù)宏\t611
總結(jié)\t612
第20章 最后的項目:構(gòu)建多線程Web服務(wù)器\t613
構(gòu)建單線程Web服務(wù)器\t614
監(jiān)聽TCP連接\t615
讀取請求\t617
仔細觀察HTTP請求\t620
編寫響應(yīng)\t621
返回真正的HTML\t622
驗證請求有效性并選擇性地響應(yīng)\t624
少許重構(gòu)\t626
把單線程服務(wù)器修改為多線程服務(wù)器\t628
在現(xiàn)有的服務(wù)器實現(xiàn)中模擬一個慢請求\t628
使用線程池改進吞吐量\t629
優(yōu)雅地停機與清理\t652
為ThreadPool實現(xiàn)Drop trait\t652
通知線程停止監(jiān)聽任務(wù)\t655
總結(jié)\t661
附錄A 關(guān)鍵字\t662
當(dāng)前正在使用的關(guān)鍵字\t662
將來可能會使用的保留關(guān)鍵字\t664
原始標(biāo)識符\t665
附錄B 運算符和符號\t667
運算符\t667
非運算符符號\t669
附錄C 可派生trait\t673
面向程序員格式化輸出的Debug\t674
用于相等性比較的PartialEq和Eq\t675
使用PartialOrd和Ord進行次序比較\t675
使用Clone和Copy復(fù)制值\t676
用于將值映射到另外一個長度固定的值的Hash\t677
用于提供默認值的Default\t678
附錄D 有用的開發(fā)工具\t679
使用rustfmt自動格式化代碼\t679
使用rustfix修復(fù)代碼\t680
使用Clippy完成更多的代碼分析\t681
使用Rust語言服務(wù)器來集成IDE\t683
附錄E 版本\t684

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號