Rust 實戰:從入門到精通 (Beginning Rust: From Novice to Professional)
內容描述
本書可幫助讀者學會在Unix、Linux shell、MacOS和Windows命令行上以輕鬆、
循序漸進的方式使用Rust進行編程,引導讀者全面了解Rust提供的功能。
本書從Rust的基礎開始講解,包括如何命名對象、控制執行流和處理基本類型。
你將了解如何進行算術運算、分配內存、使用迭代器以及處理輸入/輸出。
掌握了這些核心技能後,你將很快就能用Rust處理錯誤並使用Rust的面向對象特性構建強大的Rust應用程序。
本書對初學者非常友好,只需了解基本的編程知識——最好是有C或C++的基礎知識,就可以完成本書的學習。
而且,要充分理解本書,只需知道什麼是整數和浮點數,以及能夠區分標識符和字符串就可以了。
通過閱讀本書,你將能夠:
● 開始使用Rust進行編程
● 了解各種數據結構和數據序列
● 定義函數、泛型函數和結構等
● 處理閉包、可變字符串、範圍和切片
● 使用trait並了解生命週期
目錄大綱
目錄
第1章 終端打印1
1.1 如何開始1
1.2 Hello,world!2
1.3 打印字面量字符串的組合3
1.4 打印多行文本4
1.5 打印整數5
1.6 命令行腳本6
1.7 註釋6
第2章 算術運算8
2.1 整數加法8
2.2 整數之間的其他運算9
2.3 浮點運算10
2.4 語句序列11
2.5 分斷字面量字符串12
第3章 命名對象14
3.1 將名稱與值相關聯14
3.2 可變變量16
3.3 未變化的可變變量17
3.4 未初始化的變量18
3.5 前導下劃線19
3.6 布爾值20
3.7 布爾表達式22
3.8 賦值中的類型一致性23
3.9 類型和可變性的改變24
3.10 賦值算術運算符25
3.11 使用標準庫的函數25
第4章 控制執行流27
4.1 條件語句(if)27
4.2 條件表達式29
4.3 條件循環(while)30
4.4 無限循環(loop)32
4.5 計數循環(for)33
4.6 變量作用域34
第5章 使用數據序列37
5.1 數組37
5.1.1 可變數組39
5.1.2 指定大小的數組40
5.1.3 多維數組41
5.2 向量42
5.3 空數組和空向量45
5.4 調試打印46
5.5 複製數組和向量47
第6章 使用基本類型48
6.1 非十進制數字基數48
6.2 數字字面量中的下劃線50
6.3 指數表示法50
6.4 各種有符號整數51
6.5 無符號整數類型53
6.6 目標相關的整數類型54
6.7 類型推斷55
6.8 浮點數值類型57
6.9 顯式轉換58
6.10 數字字面量的類型後綴59
6.11 所有數值類型60
6.12 布爾值和字符61
6.13 空元組62
6.14 數組和向量類型63
6.15 常數64
6.16 發現表達式的類型64
第7章 枚舉情況66
7.1 枚舉66
7.2 match構造68
7.3 關係運算符和枚舉69
7.4 處理所有情況70
7.4.1 對數字使用match71
7.4.2 數據枚舉72
7.4.3 “match”表達式74
7.4.4 在match結構中使用守衛75
第8章 使用異構數據結構76
8.1 元組76
8.2 結構77
8.3 元組結構80
8.4 詞法約定80
第9章 定義函數82
9.1 定義和調用函數82
9.1.1 使用後定義的函數83
9.1.2 函數屏蔽其他函數83
9.1.3 將參數傳遞給函數85
9.1.4 按值傳遞參數86
9.2 從函數返回值86
9.2.1 提前退出87
9.2.2 返回多個值89
9.3 如何更改屬於調用者的變量90
9.4 通過引用傳遞參數91
9.4.1 使用引用92
9.4.2 引用的可變性93
第10章 定義泛型函數和結構95
10.1 對泛型函數的需求95
10.2 定義和使用泛型函數96
10.3 推斷參數類型97
10.4 定義和使用泛型結構98
10.4.1 泛型機制99
10.4.2 泛型數組和向量101
10.4.3 泛型枚舉101
10.5 錯誤處理103
10.6 枚舉標準實用程序函數104
第11章 分配內存106
11.1 各種分配106
11.1.1 線性尋址107
11.1.2 靜態分配108
11.1.3 棧分配109
11.1.4 堆分配114
11.2 與C和C++的相似性117
11.3 裝箱與拆箱117
11.4 寄存器分配119
第12章 數據實現120
12.1 探索對象的大小120
12.1.1 use指令121
12.1.2 基本類型的大小122
12.2 基本類型的表示122
12.3 字節在內存中的位置123
12.4 複合數據類型的大小125
12.5 向量分配125
第13章 定義閉包128
13.1 對“一次性”函數的需求128
13.2 捕獲環境129
13.3 閉包130
13.4 其他例子132
第14章 使用可變字符串134
14.1 靜態字符串134
14.2 動態字符串136
14.3 字符串的實現137
14.4 創建字符串139
14.5 連接字符串140
第15章 範圍和切片142
15.1 範圍142
15.2 將序列傳遞給函數144
15.3 切片145
15.4 切片操作147
15.5 超出範圍的切片149
15.6 可變切片149
15.7 開放式範圍和切片操作150
第16章 使用迭代器152
16.1 字符串字符152
16.2 掃描字符串153
16.3 在for循環中使用迭代器155
16.3.1 不可變的迭代157
16.3.2 可變的迭代158
16.4 迭代器適配器:filter161
16.4.1 map迭代器適配器162
16.4.2 enumerate迭代器適配器163
16.5 迭代器消費者:any164
16.5.1 all迭代器消費者166
16.5.2 count迭代器消費者166
16.5.3 sum迭代器消費者166
16.5.4 min和max迭代器消費者167
16.5.5 collect消費者168
16.6 迭代器鏈169
16.7 迭代器是“惰性的”170
第17章 輸入/輸出和錯誤處理方式172
17.1 命令行參數172
17.2 進程返回碼173
17.3 環境變量173
17.4 從控制台讀取174
17.5 正確的運行時錯誤處理176
17.6 寫入控制台179
17.7 將值轉換為字符串179
17.8 文件輸入/輸出180
17.9 處理文本文件182
第18章 使用trait184
18.1 對trait的需求184
18.2 trait的補救186
18.3 沒有trait界限的泛型函數188
18.4 trait作用域189
18.5 多函數trait190
18.6 方法192
18.7 "self"和"Self"關鍵字194
18.8 標準trait196
18.8.1 "Iterator" trait197
18.8.2 "type"關鍵字199
18.8.3 泛型trait200
18.8.4 使用關聯類型簡化泛型trait使用203
18.8.5 "Iterator"標準trait聲明206
18.9 使用泛型迭代器208
第19章 面向對象程序設計210
19.1 固有實現210
19.2 Rust面向對象的特殊性213
19.3 可變方法216
19.4 構造函數217
19.5 組合而不是繼承218
19.6 組合的內存使用情況220
19.6.1 靜態分發221
19.6.2 動態分發223
19.6.3 trait引用的實現224
19.6.4 靜態分發與動態分發226
第20章 標準庫集合228
20.1 集合228
20.2 測量執行時間229
20.3 執行任意插入和移除230
20.4 隊列231
20.5 鍊錶234
20.6 二叉堆235
20.7 有序集和無序集236
20.8 有序字典和無序字典239
20.9 C++和Rust中的集合240
第21章 丟棄、移動和復制241
21.1 確定性析構241
21.2 所有權243
21.3 析構函數244
21.4 賦值語義248
21.4.1 複製與移動性能對比250
21.4.2 移動和銷毀對象252
21.4.3 對複制語義的需要254
21.4.4 克隆對象255
21.4.5 使類型可克隆或可複制257
第22章 借用和生命週期259
22.1 所有權和借用259
22.2 對像生命週期260
22.3 關於借用的錯誤262
22.3.1 如何防止“丟棄後使用”錯誤264
22.3.2 如何防止“別名更改後使用”錯誤265
22.4 多重借用的可能情況266
22.5 使用塊來限制借用作用域268
22.6 返回引用對生命週期說明符的需求269
22.6.1 生命週期說明符的用法和意義271
22.6.2 檢查生命週期說明符的有效性273
22.6.3 使用調用函數的生命週期說明符276
第23章 關於生命週期的更多信息279
23.1 生命週期省略279
23.2 面向對象編程的生命週期省略280
23.3 結構對生命週期說明符的需要281
23.4 可能的結構生命週期說明符283
23.5 生命週期說明符的其他用途285
作者介紹
Carlo Milanesi
Rust專家和專業軟件開發人員。
他是Rust開發社區的貢獻者,也曾使用PHP、JavaScript、Java、Ionic和Vaadin框架基於Linux的Web應用程序開發。
他還涉獵了其他技術,包括GUI設計、2D和3D渲染、測試自動化、數據庫訪問等。
他畢業於米蘭大學,曾在金融和計算機輔助製造行業工作。