Rust編程與項目實戰

朱文偉 李建英

  • 出版商: 清華大學
  • 出版日期: 2024-05-01
  • 定價: $594
  • 售價: 8.5$505
  • 語言: 簡體中文
  • ISBN: 7302660247
  • ISBN-13: 9787302660248
  • 相關分類: Rust 語言
  • 下單後立即進貨 (約4週~6週)

  • Rust編程與項目實戰-preview-1
  • Rust編程與項目實戰-preview-2
  • Rust編程與項目實戰-preview-3
Rust編程與項目實戰-preview-1

相關主題

商品描述

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