精通rust 第2版

精通rust 第2版

《精通rust 第2版》是2021年人民郵電出版社出版的圖書。Rust是一門系統程式語言,是支持函式式、命令式以及泛型等編程範式的多範式語言。Rust在語法上和C 類似。Rust快速、可靠、安全,它提供了甚至超過C C 的性能和安全保證,同時它也是一種學習曲線比較平滑的熱門程式語言。

基本介紹

  • 中文名:精通rust 第2版
  • 作者:[印]拉胡爾·沙瑪(Rahul Sharma)、[芬]韋薩·凱拉維塔
  • 出版社:人民郵電出版社
  • ISBN:9787115552549
內容簡介,圖書目錄,作者簡介,

內容簡介

Rust是一門系統程式語言,是支持函式式、命令式以及泛型等編程範式的多範式語言。Rust在語法上和C 類似。Rust快速、可靠、安全,它提供了甚至超過C C 的性能和安全保證,同時它也是一種學習曲線比較平滑的熱門程式語言。
本書內容共17章,由淺入深地講解Rust相關的知識,涉及基礎語法、軟體包管理器、測試工具、類型系統、記憶體管理、異常處理、高級類型、並發模型、宏、外部函式接口、網路編程、HTTP、資料庫、WebAssembly、GTK 框架和GDB調試等重要知識點。
本書適合想學習Rust編程的讀者閱讀,希望讀者能夠對C、C 或者Python有一些了解。書中豐富的代碼示例和詳細的講解能夠幫助讀者快速上手,高效率掌握Rust編程。

圖書目錄

第 1章 Rust入門1
1.1 Rust是什麼,以及為何需要關注它 1
1.2 安裝Rust工具鏈 7
1.3 Rust簡介 9
1.3.1 基元類型 12
1.3.2 變數聲明和不可變性 13
1.3.3 函式 14
1.3.4 閉包 16
1.3.5 字元串 17
1.3.6 條件和判斷 17
1.3.7 match表達式 19
1.3.8 循環 20
1.3.9 自定義數據類型 22
1.3.10 類型上的函式和方法 27
1.3.11 module、import和use語句 31
1.3.12 集合 31
1.3.13 疊代器 35
1.4 改進字元計數器 36
1.5 小結 38
第 2章 使用Cargo管理項目 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項目 47
2.3.2 Cargo與依賴項 48
2.3.3 使用Cargo執行測試 50
2.3.4 使用Cargo運行示例 52
2.3.5 Cargo工作區 53
2.4 Cargo工具擴展 54
2.4.1 子命令和Cargo安裝 54
2.4.2 使用clippy格式化代碼 56
2.4.3 Cargo.toml清單檔案簡介 57
2.5 搭建Rust開發環境 60
2.6 使用Cargo構建imgtool程式 63
2.7 小結 66
第3章 測試、文檔化和基準評估 67
3.1 測試的目的 67
3.2 組織測試 68
3.3 單元測試 71
3.3.1 第 一個單元測試 71
3.3.2 運行測試 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 基準 81
3.6.1 內置的微觀基準工具 81
3.6.2 穩定版Rust上的基準測試 83
3.7 編寫和測試軟體包——邏輯門模擬器 86
3.8 CI集成測試與Travis CI 90
3.9 小結 93
第4章 類型、泛型和特徵 94
4.1 類型系統及其重要性 94
4.2 泛型 95
4.2.1 創建泛型# 97
4.2.2 泛型實現 99
4.2.3 泛型套用 100
4.3 用特徵抽象行為 102
4.3.1 特徵 102
4.3.2 特徵的多種形式 108
4.4 使用包含泛型的特徵——特徵區間 110
4.4.1 類型上的特徵區間 113
4.4.2 泛型函式和impl代碼塊
上的特徵區間 114
4.4.3 使用“ ”將特徵組合為區間 115
4.4.4 特徵區間與impl特徵
語法 116
4.5 標準庫特徵簡介 118
4.6 使用特徵對象實現真正的多態性 125
4.6.1 分發 125
4.6.2 特徵對象 126
4.7 小結 128
第5章 記憶體管理和安全性 129
5.1 程式和記憶體 130
5.2 程式如何使用記憶體 131
5.3 記憶體管理及其分類 132
5.4 記憶體分配簡介 133
5.4.1 堆疊 133
5.4.2 堆 135
5.5 記憶體管理的缺陷 136
5.6 記憶體安全性 137
5.7 記憶體安全三原則 139
5.7.1 所有權 139
5.7.2 通過特徵複製類型 144
5.7.3 借用 151
5.7.4 基於借用規則的方法類型 156
5.7.5 生命周期 156
5.8 Rust中的指針類型 164
5.8.1 引用——安全的指針 164
5.8.2 原始指針 165
5.8.3 智慧型指針 165
5.8.4 引用計數的智慧型指針 170
5.8.5 內部可變性的套用 179
5.9 小結 180
第6章 異常處理 181
6.1 異常處理簡介 181
6.2 可恢復的異常 183
6.2.1 Option 183
6.2.2 Result 187
6.3 Option Result的組合 191
6.3.1 常見的組合器 191
6.3.2 組合器套用 192
6.3.3 Option和Result類型之間的轉換 194
6.4 及早返回和運算符“?” 194
6.5 不可恢復的異常 196
6.6 自定義錯誤和Error特徵 199
6.7 小結 204
第7章 高級概念 205
7.1 類型系統簡介 205
7.1.1 代碼塊和表達式 206
7.1.2 let語句 209
7.1.3 循環作為表達式 214
7.1.4 數字類型中的類型清晰度和符號區分 215
7.1.5 類型推斷 217
7.1.6 類型別名 218
7.2 字元串 219
7.2.1 包含所有權的字元串——String 220
7.2.2 借用字元串——&str 222
7.2.3 字元串切片和分塊 223
7.2.4 在函式中使用字元串 225
7.2.5 字元串拼接 225
7.2.6 &str和String的套用場景 226
7.3 全局值 227
7.3.1 常量 227
7.3.2 靜態值 227
7.3.3 編譯期函式——const fn 228
7.3.4 通過lazy_static!宏將靜態值動態化 229
7.4 疊代器 230
7.5 高級類型 235
7.5.1 不定長類型 235
7.5.2 函式類型 236
7.5.3 never類型“!”和函式分發 236
7.5.4 聯合 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 通用函式調用語法 240
7.6.7 特徵規則 241
7.7 閉包進階 241
7.7.1 Fn閉包 241
7.7.2 FnMut閉包 242
7.7.3 FnOnce閉包 242
7.8 結構體、枚舉和特徵中的常量 243
7.9 模組、路徑和導入 245
7.9.1 導入 245
7.9.2 再次導出 245
7.9.3 隱私性 246
7.10 高級匹配模式和守護 246
7.10.1 匹配守護 246
7.10.2 高級let構造 247
7.11 強制類型轉換 247
7.12 類型與記憶體 248
7.12.1 記憶體對齊 248
7.12.2 std::mem模組 249
7.13 使用serde進行序列化和反序列化 251
7.14 小結 252
第8章 並發 253
8.1 程式執行模型 253
8.2 並發 254
8.2.1 並發方法 255
8.2.2 缺陷 257
8.3 Rust中的並發 259
8.3.1 執行緒基礎 259
8.3.2 自定義執行緒 261
8.3.3 訪問執行緒中的數據 262
8.4 執行緒的並發模型 264
8.4.1 狀態共享模型 264
8.4.2 互斥 267
8.4.3 通過Arc和Mutex實現共享可變性 268
8.4.4 通過訊息傳遞進行通信 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模型實現並發 274
8.7 其他程式庫 277
8.8 小結 278
第9章 宏與元編程 279
9.1 什麼是元編程? 279
9.2 Rust宏的套用場景 282
9.3 Rust中的宏及其類型 282
9.4 使用macro_rules!創建宏 286
9.5 標準庫中的內置宏 289
9.6 macro_rules!宏的標記類型 290
9.7 宏中的重複 293
9.8 宏的高級套用——為HashMap的初始化編寫DSL 295
9.9 宏用例——編寫測試 296
9.10 練習 298
9.11 過程宏 299
9.12 派生宏 300
9.13 調試宏程式 306
9.14 常用的過程宏軟體包 306
9.15 小結 307
第 10章 不安全的Rust和外部函式
接口 308
10.1 安全與不安全 308
10.1.1 不安全的函式和代碼塊 311
10.1.2 不安全的特徵和實現 314
10.2 在Rust中調用C代碼 316
10.3 通過C語言調用Rust代碼 319
10.4 在Rust使用外部C C 程式庫 322
10.5 使用PyO3構造原生Python擴展 325
10.6 在Rust中為Node.js創建原生擴展 328
10.7 小結 332
第 11章 日誌 333
11.1 日誌記錄及其重要性 333
11.2 日誌記錄框架的需求 335
11.3 日誌記錄框架及其特性 335
11.4 日誌記錄方法 337
11.4.1 非結構化日誌記錄 337
11.4.2 結構化日誌記錄 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進行結構化日誌記錄 344
11.6 小結 350
第 12章 Rust與網路編程 351
12.1 網路編程簡介 351
12.2 同步網路I O 354
12.3 異步網路I O 361
12.3.1 Rust中的異步抽象 362
12.3.2 構建異步的Redis伺服器 364
12.4 小結 368
第 13章 用Rust構建Web套用
程式 369
13.1 Rust中的Web套用 369
13.2 用hyper進行HTTP通信 370
13.2.1 hyper伺服器端API——構建一個短網址服務 371
13.2.2 作為客戶端的hyper——構建一個URL短網址客戶端 374
13.2.3 Web框架 376
13.3 actix-web基礎知識 377
13.4 使用actix-web構建一個書籤API 377
13.5 小結 387
第 14章 Rust與資料庫 388
14.1 數據持久性的重要性 388
14.2 SQLite 390
14.3 PostgreSQL 395
14.4 r2d2連線池 399
14.5 Postgres和diesel ORM 401
14.6 小結 408
第 15章 Rust與WebAssembly 409
15.1 什麼是WebAssmbly 409
15.2 WebAssembly的設計目標 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項目 421
15.5 小結 422
第 16章 Rust與桌面套用 423
16.1 GUI開發簡介 423
16.2 GTK 框架 424
16.3 通過gtk-rs構建一個新聞類桌面應用程式 425
16.4 練習 437
16.5 其他新興的UI框架 437
16.6 小結 438
第 17章 調試 439
17.1 調試簡介 439
17.1.1 調試器基礎 440
17.1.2 調試的先決條件 441
17.1.3 配置GDB 442
17.1.4 一個示例程式——buggie 442
17.1.5 GDB基礎知識 443
17.1.6 在Visual Studio Code中集成GDB 448
17.2 rr調試器簡介 452
17.3 小結 454

作者簡介

拉胡爾·沙瑪(Rahul Sharma)對編程教學一直充滿熱情,過去兩年他一直在從事軟體開發相關的工作。他在開發Servo時開始接觸Rust,Servo是由Mozilla Research公司開發的瀏覽器引擎,是他的GSoC項目的一部分。目前他供職於AtherEnergy公司,正在為智慧型滑板車構建彈性的雲基礎架構。他感興趣的領域包括系統編程、分散式系統、編譯器及類型理論等。他也是Rust社區的特約撰稿人,並在Mozilla的Servo項目中指導實習生。
韋薩·凱拉維塔(Vesa Kaihlavirta)從5歲起就開始接觸編程,並且是從C64 BASIC開始入門的。他的職業目標是提高軟體套用領域的開發者對程式語言和軟體質量的認識。他是一名資深的Linux開發人員,並且已經在電信和金融行業工作了10年。Vesa目前住在芬蘭中部的Jyvaskyla。

相關詞條

熱門詞條

聯絡我們