注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)精通Rust 第2版

精通Rust 第2版

精通Rust 第2版

定 價(jià):¥139.00

作 者: [印] 拉胡爾·沙瑪(Rahul Sharma)[芬]韋薩·凱拉維塔 著,鄧世超 譯
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115552549 出版時間: 2021-01-01 包裝: 平裝
開本: 16開 頁數(shù): 472 字?jǐn)?shù):  

內(nèi)容簡介

  Rust是一門系統(tǒng)編程語言,是支持函數(shù)式、命令式以及泛型等編程范式的多范式語言。Rust在語法上和C++類似。Rust快速、可靠、安全,它提供了甚至超過C/C++的性能和安全保證,同時它也是一種學(xué)習(xí)曲線比較平滑的熱門編程語言。本書內(nèi)容共17章,由淺入深地講解Rust相關(guān)的知識,涉及基礎(chǔ)語法、軟件包管理器、測試工具、類型系統(tǒng)、內(nèi)存管理、異常處理、高級類型、并發(fā)模型、宏、外部函數(shù)接口、網(wǎng)絡(luò)編程、HTTP、數(shù)據(jù)庫、WebAssembly、GTK+框架和GDB調(diào)試等重要知識點(diǎn)。本書適合想學(xué)習(xí)Rust編程的讀者閱讀,希望讀者能夠?qū)、C++或者Python有一些了解。書中豐富的代碼示例和詳細(xì)的講解能夠幫助讀者快速上手,高效率掌握Rust編程。

作者簡介

  拉胡爾.沙瑪(Rahul Sharma)對編程教學(xué)一直充滿熱情,過去兩年他一直在從事軟件開發(fā)相關(guān)的工作。他在開發(fā)Servo時開始接觸Rust,Servo是由Mozilla Research公司開發(fā)的瀏覽器引擎,是他的GSoC項(xiàng)目的一部分。目前他供職于AtherEnergy公司,正在為智能滑板車構(gòu)建彈性的云基礎(chǔ)架構(gòu)。他感興趣的領(lǐng)域包括系統(tǒng)編程、分布式系統(tǒng)、編譯器及類型理論等。他也是Rust社區(qū)的特約撰稿人,并在Mozilla的Servo項(xiàng)目中指導(dǎo)實(shí)習(xí)生。韋薩.凱拉維塔(Vesa Kaihlavirta)從5歲起就開始接觸編程,并且是從C64 BASIC開始入門的。他的職業(yè)目標(biāo)是提高軟件應(yīng)用領(lǐng)域的開發(fā)者對編程語言和軟件質(zhì)量的認(rèn)識。他是一名資深的Linux開發(fā)人員,并且已經(jīng)在電信和金融行業(yè)工作了10年。Vesa目前住在芬蘭中部的Jyvaskyla。

圖書目錄

第1章 Rust入門 1

1.1 Rust是什么,以及為何需要關(guān)注它 1

1.2 安裝Rust工具鏈 7

1.3 Rust簡介 9

1.3.1 基元類型 12

1.3.2 變量聲明和不可變性 13

1.3.3 函數(shù) 14

1.3.4 閉包 16

1.3.5 字符串 17

1.3.6 條件和判斷 17

1.3.7 match表達(dá)式 19

1.3.8 循環(huán) 20

1.3.9 自定義數(shù)據(jù)類型 22

1.3.10 類型上的函數(shù)和方法 27

1.3.11 module、import和use語句 31

1.3.12 集合 31

1.3.13 迭代器 35

1.4 改進(jìn)字符計(jì)數(shù)器 36

1.5 小結(jié) 38

第2章使用Cargo管理項(xiàng)目 39

2.1 軟件包管理器 40

2.2 模塊 40

2.2.1 嵌套模塊 40

2.2.2 將文件用作模塊 43

2.2.3 將目錄用作模塊 44

2.3 Cargo和程序庫 46

2.3.1 新建一個Cargo項(xiàng)目 47

2.3.2 Cargo與依賴項(xiàng) 48

2.3.3 使用Cargo執(zhí)行測試 50

2.3.4 使用Cargo運(yùn)行示例 52

2.3.5 Cargo工作區(qū) 53

2.4 Cargo工具擴(kuò)展 54

2.4.1 子命令和Cargo安裝 54

2.4.2 使用clippy格式化代碼 56

2.4.3 Cargo.toml清單文件簡介 57

2.5 搭建Rust開發(fā)環(huán)境 60

2.6 使用Cargo構(gòu)建imgtool程序 63

2.7 小結(jié) 66

第3章 測試、文檔化和基準(zhǔn)評估 67

3.1 測試的目的 67

3.2 組織測試 68

3.3 單元測試 71

3.3.1 第一個單元測試 71

3.3.2 運(yùn)行測試 71

3.3.3 隔離測試代碼 72

3.3.4 故障測試 73

3.3.5 忽略測試 73

3.4 集成測試 74

3.4.1 第一個集成測試 74

3.4.2 共享通用代碼 76

3.5 文檔 77

3.5.1 編寫文檔 78

3.5.2 生成和查看文檔 78

3.5.3 托管文檔 79

3.5.4 文檔屬性 79

3.5.5 文檔化測試 80

3.6 基準(zhǔn) 81

3.6.1 內(nèi)置的微觀基準(zhǔn)工具 81

3.6.2 穩(wěn)定版Rust上的基準(zhǔn)測試 83

3.7 編寫和測試軟件包——邏輯門模擬器 86

3.8 CI集成測試與TravisCI 90

3.9 小結(jié) 93

第4章 類型、泛型和特征 94

4.1 類型系統(tǒng)及其重要性 94

4.2 泛型 95

4.2.1 創(chuàng)建泛型# 97

4.2.2 泛型實(shí)現(xiàn) 99

4.2.3 泛型應(yīng)用 100

4.3 用特征抽象行為 102

4.3.1 特征 102

4.3.2 特征的多種形式 108

4.4 使用包含泛型的特征——特征區(qū)間 110

4.4.1 類型上的特征區(qū)間 113

4.4.2 泛型函數(shù)和impl代碼塊上的特征區(qū)間 114

4.4.3 使用“+”將特征組合為區(qū)間 115

4.4.4 特征區(qū)間與impl特征語法 116

4.5 標(biāo)準(zhǔn)庫特征簡介 118

4.6 使用特征對象實(shí)現(xiàn)真正的多態(tài)性 125

4.6.1 分發(fā) 125

4.6.2 特征對象 126

4.7 小結(jié) 128

第5章 內(nèi)存管理和安全性 129

5.1 程序和內(nèi)存 130

5.2 程序如何使用內(nèi)存 131

5.3 內(nèi)存管理及其分類 132

5.4 內(nèi)存分配簡介 133

5.4.1 堆?!?33

5.4.2 堆 135

5.5 內(nèi)存管理的缺陷 136

5.6 內(nèi)存安全性 137

5.7 內(nèi)存安全三原則 139

5.7.1 所有權(quán) 139

5.7.2 通過特征復(fù)制類型 144

5.7.3 借用 151

5.7.4 基于借用規(guī)則的方法類型 156

5.7.5 生命周期 156

5.8 Rust中的指針類型 164

5.8.1 引用——安全的指針 164

5.8.2 原始指針 165

5.8.3 智能指針 165

5.8.4 引用計(jì)數(shù)的智能指針 170

5.8.5 內(nèi)部可變性的應(yīng)用 179

5.9 小結(jié) 180

第6章 異常處理 181

6.1 異常處理簡介 181

6.2 可恢復(fù)的異?!?83

6.2.1 Option 183

6.2.2 Result 187

6.3 Option/Result的組合 191

6.3.1 常見的組合器 191

6.3.2 組合器應(yīng)用 192

6.3.3 Option和Result類型之間的轉(zhuǎn)換 194

6.4 及早返回和運(yùn)算符“?” 194

6.5 不可恢復(fù)的異?!?96

6.6 自定義錯誤和Error特征 199

6.7 小結(jié) 204

第7章 高級概念 205

7.1 類型系統(tǒng)簡介 205

7.1.1 代碼塊和表達(dá)式 206

7.1.2 let語句 209

7.1.3 循環(huán)作為表達(dá)式 214

7.1.4 數(shù)字類型中的類型清晰度和符號區(qū)分 215

7.1.5 類型推斷 217

7.1.6 類型別名 218

7.2 字符串 219

7.2.1 包含所有權(quán)的字符串——String 220

7.2.2 借用字符串——&str 222

7.2.3 字符串切片和分塊 223

7.2.4 在函數(shù)中使用字符串 225

7.2.5 字符串拼接 225

7.2.6 &str和String的應(yīng)用場景 226

7.3 全局值 227

7.3.1 常量 227

7.3.2 靜態(tài)值 227

7.3.3 編譯期函數(shù)——constfn 228

7.3.4 通過lazy_static!宏將靜態(tài)值動態(tài)化 229

7.4 迭代器 230

7.5 高級類型 235

7.5.1 不定長類型 235

7.5.2 函數(shù)類型 236

7.5.3 never類型“!”和函數(shù)分發(fā) 236

7.5.4 聯(lián)合 236

7.5.5 Cow 238

7.6 高級特征 238

7.6.1 Sized和Sized 238

7.6.2 Borrow和AsRef 238

7.6.3 ToOwned 238

7.6.4 From和Into 239

7.6.5 特征對象和對象安全性 239

7.6.6 通用函數(shù)調(diào)用語法 240

7.6.7 特征規(guī)則 241

7.7 閉包進(jìn)階 241

7.7.1 Fn閉包 241

7.7.2 FnMut閉包 242

7.7.3 FnOnce閉包 242

7.8 結(jié)構(gòu)體、枚舉和特征中的常量 243

7.9 模塊、路徑和導(dǎo)入 245

7.9.1 導(dǎo)入 245

7.9.2 再次導(dǎo)出 245

7.9.3 隱私性 246

7.10 高級匹配模式和守護(hù) 246

7.10.1 匹配守護(hù) 246

7.10.2 高級let構(gòu)造 247

7.11 強(qiáng)制類型轉(zhuǎn)換 247

7.12 類型與內(nèi)存 248

7.12.1 內(nèi)存對齊 248

7.12.2 std::mem模塊 249

7.13 使用serde進(jìn)行序列化和反序列化 251

7.14 小結(jié) 252

第8章 并發(fā) 253

8.1 程序執(zhí)行模型 253

8.2 并發(fā) 254

8.2.1 并發(fā)方法 255

8.2.2 缺陷 257

8.3 Rust中的并發(fā) 259

8.3.1 線程基礎(chǔ) 259

8.3.2 自定義線程 261

8.3.3 訪問線程中的數(shù)據(jù) 262

8.4 線程的并發(fā)模型 264

8.4.1 狀態(tài)共享模型 264

8.4.2 互斥 267

8.4.3 通過Arc和Mutex實(shí)現(xiàn)共享可變性 268

8.4.4 通過消息傳遞進(jìn)行通信 270

8.5 Rust中的線程安全 272

8.5.1 什么是線程安全 273

8.5.2 線程安全的特征 273

8.5.3 Send 274

8.5.4 Sync 274

8.6 使用actor模型實(shí)現(xiàn)并發(fā) 274

8.7 其他程序庫 277

8.8 小結(jié) 278

第9章 宏與元編程 279

9.1 什么是元編程? 279

9.2 Rust宏的應(yīng)用場景 282

9.3 Rust中的宏及其類型 282

9.4 使用macro_rules!創(chuàng)建宏 286

9.5 標(biāo)準(zhǔn)庫中的內(nèi)置宏 289

9.6 macro_rules!宏的標(biāo)記類型 290

9.7 宏中的重復(fù) 293

9.8 宏的高級應(yīng)用——為HashMap的初始化編寫DSL 295

9.9 宏用例——編寫測試 296

9.10 練習(xí) 298

9.11 過程宏 299

9.12 派生宏 300

9.13 調(diào)試宏程序 306

9.14 常用的過程宏軟件包 306

9.15 小結(jié) 307

第10章不安全的Rust和外部函數(shù)接口 308

10.1 安全與不安全 308

10.1.1 不安全的函數(shù)和代碼塊 311

10.1.2 不安全的特征和實(shí)現(xiàn) 314

10.2 在Rust中調(diào)用C代碼 316

10.3 通過C語言調(diào)用Rust代碼 319

10.4 在Rust使用外部C/C++程序庫 322

10.5 使用PyO3構(gòu)造原生Python擴(kuò)展 325

10.6 在Rust中為Node.js創(chuàng)建原生擴(kuò)展 328

10.7 小結(jié) 332

第11章日志 333

11.1 日志記錄及其重要性 333

11.2 日志記錄框架的需求 335

11.3 日志記錄框架及其特性 335

11.4 日志記錄方法 337
11.4.1 非結(jié)構(gòu)化日志記錄 337
11.4.2 結(jié)構(gòu)化日志記錄 338

11.5 Rust中的日志記錄 338
11.5.1 log——為Rust日志記錄提供外觀 339
11.5.2 env_logger 340
11.5.3 log4rs 342
11.5.4 使用slog進(jìn)行結(jié)構(gòu)化日志記錄 344

11.6 小結(jié) 350

第12章Rust與網(wǎng)絡(luò)編程 351

12.1 網(wǎng)絡(luò)編程簡介 351

12.2 同步網(wǎng)絡(luò)I/O 354

12.3 異步網(wǎng)絡(luò)I/O 361

12.3.1 Rust中的異步抽象 362

12.3.2 構(gòu)建異步的Redis服務(wù)器 364

12.4 小結(jié) 368

第13章用Rust構(gòu)建Web應(yīng)用程序 369
13.1 Rust中的Web應(yīng)用 369
13.2 用hyper進(jìn)行HTTP通信 370
13.2.1 hyper服務(wù)器端API——構(gòu)建一個短網(wǎng)址服務(wù) 371
13.2.2 作為客戶端的hyper——構(gòu)建一個URL短網(wǎng)址客戶端 374
13.2.3 Web框架 376
13.3 actix-web基礎(chǔ)知識 377
13.4 使用actix-web構(gòu)建一個書簽API 377
13.5 小結(jié) 387

第14章Rust與數(shù)據(jù)庫 388

14.1 數(shù)據(jù)持久性的重要性 388
14.2 SQLite 390
14.3 PostgreSQL 395
14.4 r2d2連接池 399
14.5 Postgres和dieselORM 401
14.6 小結(jié) 408

第15章Rust與WebAssembly 409

15.1 什么是WebAssmbly 409
15.2 WebAssembly的設(shè)計(jì)目標(biāo) 412
15.3 WebAssembly入門 412
15.3.1 在線嘗試 413
15.3.2 生成WebAssembly的方法 413
15.4 Rust和WebAssembly 414
15.4.1 Wasm-bindgen 414
15.4.2 其他WebAssembly項(xiàng)目 421
15.5 小結(jié) 422

第16章Rust與桌面應(yīng)用 423

16.1 GUI開發(fā)簡介 423
16.2 GTK+框架 424
16.3 通過gtk-rs構(gòu)建一個新聞類桌面應(yīng)用程序 425
16.4 練習(xí) 437
16.5 其他新興的UI框架 437
16.6 小結(jié) 438

第 17章 調(diào)試 439
17.1 調(diào)試簡介 439
17.1.1 調(diào)試器基礎(chǔ) 440
17.1.2 調(diào)試的先決條件 441
17.1.3 配置GDB 442
17.1.4 一個示例程序——buggie 442
17.1.5 GDB基礎(chǔ)知識 443
17.1.6 在Visual Studio Code中集成GDB 448
17.2 rr調(diào)試器簡介 452
17.3 小結(jié) 454

本目錄推薦

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