Rust 編程與項目實戰
朱文偉 李建英
買這商品的人也買了...
-
$420$332 -
$480$379 -
$780$616 -
$880$695 -
$560$442 -
$680$537 -
$880$695 -
$500$395 -
$520$410 -
$550$429 -
$580$458 -
$500$390 -
$780$616 -
$534$507 -
$780$616 -
$599$569 -
$599$569 -
$880$695 -
$880$695 -
$768$730 -
$850$672 -
$780$616 -
$650$507 -
$680$530 -
$600$468
相關主題
商品描述
Rust是一門系統編程語言,專註於安全,尤其是並發安全,它也是支持函數式、命令式以及泛型等編程範式的多範式語言。標準Rust在語法和性能上和標準C++類似,設計者可以在保證性能的同時提供更好的內存安全。《Rust編程與項目實戰》詳解Rust編程技巧,配套示例源碼、PPT課件、作者QQ答疑服務。 《Rust編程與項目實戰》共分17章,內容包括Rust基礎,搭建Rust開發環境,常量、變量和標量數據類型,運算符和格式化輸出,選擇結構,控制結構,函數,復合數據類型,指針,模塊化編程和標準庫,標準庫中的字符串對象,多線程編程,標準輸入輸出和命令行參數,文件讀寫,網絡編程實戰,圖像和游戲開發實戰,數據分析實戰。 《Rust編程與項目實戰》適用於Rust編程初學者、Rust應用開發人員、高並發和分佈式開發人員、Web Assembly開發人員、游戲開發人員以及嵌入式應用開發人員。本書也適合作為高等院校或高職高專Rust編程課程的教材。
目錄大綱
目 錄
第 1 章 Rust基礎 1
1.1 Rust概述 1
1.1.1 Rust的來源與定義 1
1.1.2 Rust適合做什麽 2
1.1.3 Rust的特點 3
1.1.4 Rust和其他語言的總體比較 4
1.2 Rust到底值不值得學 5
1.2.1 Rust是一種全面創新的語言 6
1.2.2 引用和借用 8
1.2.3 生命期 9
1.2.4 編譯時檢查和運行時開銷 10
1.2.5 有限的面向對象特徵 11
1.2.6 擴展庫支持 13
1.2.7 Rust是一種可以進行底層開發的高級語言 14
第 2 章 搭建Rust開發環境 15
2.1 搭建Windows下的Rust開發環境 15
2.1.1 安裝vs_buildtools 15
2.1.2 安裝Rust相關工具 16
2.1.3 第一個Rust項目 17
2.1.4 VS Code搭建Rust開發環境 18
2.1.5 VS Code單步調試Rust程序 20
2.1.6 VS Code自動清除輸出窗口 22
2.1.7 VS Code修改程序自動保存 23
2.1.8 關閉rust-analyzer插件的自動類型提示 23
2.2 在Linux下搭建Rust開發環境 24
2.2.1 安裝基本開發工具 24
2.2.2 啟用SSH 24
2.2.3 安裝C編譯工具 26
2.2.4 安裝和配置Rust編譯環境 27
2.2.5 命令行開發Rust程序 28
2.2.6 在VS Code中開發遠程Rust程序 30
第 3 章 常量、變量和標量數據類型 39
3.1 Rust程序結構 39
3.2 註釋 41
3.3 常量 42
3.3.1 常量的定義 42
3.3.2 直接常量 42
3.3.3 const常量 43
3.4 變量 44
3.4.1 Rust中的關鍵字 45
3.4.2 變量的命名規則 46
3.4.3 變量的定義 47
3.4.4 變量的賦值 48
3.4.5 變量的初始化 49
3.4.6 變量的可變性 49
3.4.7 變量遮蔽 50
3.4.8 字符串變量 51
3.5 數據類型的定義和分類 52
3.6 標量數據類型 53
3.6.1 整型 53
3.6.2 布爾型 57
3.6.3 字符類型 57
3.6.4 浮點型 58
3.6.5 得到變量的字節數 59
3.7 常數的數據類型 60
3.8 作用域 61
3.9 所有權 63
3.9.1 讓我們回憶棧和堆 63
3.9.2 什麽是所有權 63
第 4 章 運算符和格式化輸出 65
4.1 運算符 65
4.1.1 賦值運算符 65
4.1.2 數學運算符 66
4.1.3 組合運算符 66
4.1.4 關系運算符 67
4.1.5 邏輯運算符 68
4.1.6 位運算符 69
4.1.7 變量類型轉換運算符 70
4.1.8 運算符的優先級 71
4.2 格式化輸出宏 72
4.2.1 默認輸出 73
4.2.2 通配符{} 73
4.2.3 通配符和位置 73
4.2.4 通配符和命名參數 74
4.2.5 輸出不同的進制數 74
4.2.6 指定寬度 76
4.2.7 填充與對齊 77
4.2.8 指定小數的精確值 78
4.2.9 輸出{和} 79
4.2.10 格式化宏format! 80
第 5 章 選擇結構 81
5.1 if選擇語句 81
5.1.1 單分支if語句 82
5.1.2 雙分支if…else語句 83
5.1.3 多分支if語句 83
5.1.4 在let語句中使用if 86
5.2 匹配控制語句match 86
5.2.1 匹配整數 87
5.2.2 匹配枚舉類型 87
5.2.3 匹配元組 88
5.2.4 匹配範圍 88
5.2.5 匹配守衛 89
5.2.6 一些經驗 89
第 6 章 控制結構 91
6.1 生活及數學中的循環控制 91
6.2 for循環 91
6.3 while循環 92
6.4 loop循環 93
6.5 break語句 93
6.5.1 break單獨使用 94
6.5.2 break帶出返回值 94
6.5.3 跳轉到指定標簽的循環 95
6.6 continue語句 96
6.6.1 continue單獨使用 96
6.6.2 跳轉到指定標簽的循環 97
第 7 章 函數 99
7.1 函數定義 99
7.2 函數參數 100
7.3 函數返回值 100
7.4 函數重載 101
7.5 函數作為參數和返回值 102
7.6 Rust泛型 102
7.6.1 什麽是泛型編程 102
7.6.2 在函數中使用泛型 103
7.6.3 在結構體中使用泛型 106
第 8 章 復合數據類型 108
8.1 數組 108
8.1.1 什麽是數組 108
8.1.2 數組的定義和初始化 109
8.1.3 輸出數組元素 110
8.1.4 得到數組長度 110
8.1.5 默認值初始化 110
8.1.6 訪問數組元素 111
8.1.7 數組切片 111
8.1.8 多維數組 113
8.2 元組 113
8.2.1 元組的定義 113
8.2.2 元組的輸出 114
8.2.3 訪問元組中的單個元素 114
8.3 結構體類型 115
8.3.1 結構體的定義 116
8.3.2 結構體實例化 116
8.3.3 結構體的方法 117
8.3.4 結構體的關聯函數 118
8.3.5 結構體的特性 119
8.3.6 結構體的註意事項 119
8.4 枚舉類型 120
8.4.1 定義枚舉類型 120
8.4.2 枚舉類型的使用 122
8.4.3 包含數據的枚舉 123
8.4.4 some類型 124
8.5 trait 125
8.5.1 成員方法 125
8.5.2 靜態方法 128
8.5.3 擴展方法 129
8.5.4 完整函數調用方法 130
8.5.5 trait約束和繼承 131
8.5.6 derive屬性 132
8.5.7 trait別名 133
8.5.8 Sized trait 133
8.5.9 默認trait 134
第 9 章 指針 135
9.1 指針的概念 135
9.1.1 地址和指針 135
9.1.2 指針變量的定義 136
9.2 指針變量的基本使用方法 137
9.2.1 指針變量的賦值 137
9.2.2 得到指針變量的大小 138
9.2.3 得到指針變量所指變量的值 139
9.2.4 指針變量做函數參數 140
9.2.5 指針變量做函數返回值 141
9.2.6 數組通過指針來引用 142
9.3 函數指針 143
9.3.1 什麽是函數指針 143
9.3.2 用函數指針變量調用函數 143
9.3.3 函數指針做函數參數 146
9.4 指針數組 148
第 10 章 模塊化編程和標準庫 150
10.1 箱 151
10.1.1 創建crate庫 151
10.1.2 創建可執行的crate 152
10.1.3 可執行crate調用crate庫 152
10.2 包 153
10.2.1 創建可執行類型的包 154
10.2.2 僅編譯包 155
10.2.3 創建庫類型的包 155
10.2.4 包管理工具Cargo 157
10.2.5 典型的包結構 158
10.2.6 引用外部庫 160
10.3 模塊 164
10.3.1 模塊的定義 164
10.3.2 模塊的結構 165
10.3.3 模塊的訪問控制 166
10.3.4 模塊的基本使用 169
10.3.5 創建嵌套模塊 169
10.3.6 多模塊多文件 174
10.4 工作區的概念 177
10.5 標準庫概述 177
第 11 章 標準庫中的字符串對象 180
11.1 概述 180
11.2 創建字符串對象 180
11.3 字符串對象常用的方法 182
11.3.1 as_bytes得到字符串內容的字節切片 182
11.3.2 as_mut_str轉換字符串的可變性 182
11.3.3 as_str提取整個字符串切片 182
11.3.4 capacity獲得此字符串的緩沖區容量 183
11.3.5 clear刪除字符串內容 183
11.3.6 drain刪除部分字符串 183
11.3.7 from_raw_parts創建新的字符串 184
11.3.8 from_utf16將UTF-16編碼的矢量解碼為字符串 184
11.3.9 from_utf8將字節向量轉換為字符串 185
11.3.10 insert插入一個字符 185
11.3.11 insert_str插入一個字符串切片 186
11.3.12 into_bytes將字符串轉換為字節向量 186
11.3.13 is_empty判斷字符串長度是否為零 186
11.3.14 len得到字符串長度 186
11.3.15 new創建一個新的空字符串 187
11.3.16 with_capacity創建指定容量的新空字符串 187
11.3.17 push追加字符 187
11.3.18 push_str追加字符串 188
11.3.19 truncate縮短字符串 188
11.3.20 pop刪除最後一個字符 188
11.3.21 remove刪除指定字符 190
11.3.22 reserve保留容量 191
11.3.23 shrink_to使用下限縮小此字符串的容量 191
11.3.24 shrink_to_fit縮小此字符串
的容量 192
11.3.25 split_off分割字符串 192
11.3.26 truncate縮短字符串 192
第 12 章 多線程編程 193
12.1 閉包 193
12.1.1 閉包的定義和語法 193
12.1.2 捕獲變量 194
12.1.3 閉包作為參數和返回值 195
12.1.4 閉包的使用場景 195
12.2 多線程編程概述 196
12.2.1 線程的基本概念 196
12.2.2 並發 196
12.2.3 Rust線程模型 197
12.3 模塊std::thread 197
12.3.1 spawn創建線程 197
12.3.2 等待所有線程完成 199
12.3.3 在線程中使用其他線程數據 202
12.3.4 線程函數 204
12.3.5 available_parallelism返回默認並行度 205
12.3.6 獲得當前線程的名稱和id 206
12.4 線程間通信 208
第 13 章 標準輸入輸出和命令行參數 209
13.1 概述 209
13.2 從標準輸入流中讀取數據 210
13.2.1 trait Read 210
13.2.2 trait BufRead 212
13.2.3 標準輸入函數stdin 213
13.3 標準輸出流 215
13.4 命令行參數 217
第 14 章 文件讀寫 219
14.1 打開文件 219
14.2 創建文件 220
14.3 寫文件 221
14.4 讀文件 221
14.5 追加內容到文件末尾 222
14.6 刪除文件 223
14.7 復制文件 224
第 15 章 網絡編程實戰 225
15.1 套接字的基本概念 225
15.1.1 網絡程序的架構 226
15.1.2 套接字的類型 227
15.2 IP地址枚舉IpAddr 228
15.2.1 is_unspecified函數 229
15.2.2 is_loopback函數 229
15.2.3 is_multicast函數 230
15.2.4 is_ipv4函數 230
15.2.5 is_ipv6函數 230
15.3 IPv4結構Ipv4Addr 231
15.3.1 new函數 231
15.3.2 常量LOCALHOST 232
15.3.3 常量UNSPECIFIED 232
15.3.4 常量BROADCAST 232
15.3.5 octets函數 232
15.3.6 is_unspecified函數 233
15.3.7 is_loopback函數 233
15.3.8 is_link_local函數 233
15.3.9 is_multicast函數 234
15.3.10 is_broadcast函數 234
15.3.11 to_ipv6_compatible函數 235
15.3.12 to_ipv6_mapped函數 235
15.4 IPv4套接字地址SocketAddrV4 235
15.4.1 new函數 236
15.4.2 ip函數 236
15.4.3 set_ip函數 236
15.4.4 port函數 237
15.4.5 set_port函數 237
15.5 TCP套接字編程的基本步驟 237
15.6 TCP偵聽器TcpListener 238
15.6.1 bind函數 239
15.6.2 local_addr函數 239
15.6.3 try_clone函數 240
15.6.4 accept函數 240
15.6.5 incoming函數 241
15.6.6 set_ttl函數 241
15.6.7 ttl函數 242
15.6.8 take_error函數 242
15.6.9 set_nonblocking函數 242
15.7 TCP流結構TcpStream 243
15.7.1 connect函數 243
15.7.2 connect_timeout函數 244
15.7.3 peer_addr函數 244
15.7.4 local_addr函數 245
15.7.5 shutdown函數 245
15.7.6 try_clone函數 245
15.7.7 set_read_timeout函數 246
15.7.8 set_write_timeout函數 246
15.7.9 read_timeout函數 247
15.7.10 write_timeout函數 247
15.7.11 peek函數 247
15.7.12 set_nodelay函數 248
15.7.13 nodelay函數 248
15.7.14 set_ttl函數 248
15.7.15 ttl函數 249
15.7.16 take_error函數 249
15.7.17 set_nonblocking函數 249
15.8 實戰TCP服務器客戶端編程 250
15.9 UDP套接字結構UdpSocket 251
15.9.1 bing函數 252
15.9.2 recv_from函數 253
15.9.3 peek_from函數 253
15.9.4 send_to函數 253
15.9.5 peer_addr函數 254
15.9.6 local_addr函數 254
15.9.7 local_addr函數 254
15.9.8 set_read_timeout函數 255
15.9.9 set_write_timeout函數 255
15.9.10 read_timeout函數 256
15.9.11 write_timeout函數 256
15.9.12 set_broadcast函數 256
15.9.13 broadcast函數 257
15.9.14 set_multicast_loop_v4函數 257
15.9.15 multicast_loop_v4函數 257
15.9.16 set_multicast_ttl_v4函數 257
15.9.17 multicast_ttl_v4函數 258
15.9.18 set_multicast_loop_v6函數 258
15.9.19 multicast_loop_v6函數 258
15.9.20 set_ttl函數 259
15.9.21 ttl函數 259
15.9.22 take_error函數 259
15.9.23 connect函數 260
15.9.24 send函數 260
15.9.25 recv函數 260
15.9.26 peek函數 261
15.9.27 set_nonblocking函數 261
15.9.28 實戰UDP編程 262
15.10 網絡實戰案例 263
15.10.1 HTTP的工作原理 263
15.10.2 HTTP的特點 264
15.10.3 HTTP消息結構 264
15.10.4 客戶端請求消息 265
15.10.5 服務器響應消息 266
15.10.6 HTTP狀態碼 267
15.10.7 HTTP狀態碼分類 267
15.10.8 實現HTTP服務器 268
第 16 章 圖像和游戲開發實戰 271
16.1 圖像編程基礎 271
16.2 Piston概述 273
16.3 WindowSettings結構體 274
16.3.1 new函數 274
16.3.2 build函數 274
16.3.3 get_title函數 274
16.3.4 set_title函數 274
16.3.5 title函數 275
16.3.6 get_size函數 275
16.3.7 set_size函數 275
16.3.8 size函數 275
16.3.9 get_fullscreen函數 275
16.3.10 set_fullscreen函數 275
16.3.11 fullscreen函數 275
16.3.12 get_exit_on_esc函數 276
16.3.13 set_exit_on_esc函數 276
16.3.14 exit_on_esc函數 276
16.3.15 get_automatic_close函數 276
16.3.16 set_automatic_close函數 276
16.3.17 automatic_close函數 276
16.4 piston_window庫 280
16.5 游戲實戰案例 286
第 17 章 數據分析實戰 295
17.1 Polars概述 295
17.1.1 什麽是Polars 295
17.1.2 Polars和Pandas對比 296
17.1.3 為什麽需要Polars 296
17.1.4 安裝Polars 297
17.1.5 創建DataFrame 297
17.1.6 加載外部數據 301
17.2 瀏覽數據 303
17.3 數據描述 304
17.4 聚合統計 305
17.5 數據清洗 306
17.5.1 處理缺失值 306
17.5.2 剔除重復值 307
17.6 數據操作 308
17.6.1 選擇列 308
17.6.2 數據篩選(過濾) 308
17.6.3 排序 309
17.6.4 合並 310
17.6.5 分組 311