關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
Rust編程之道 讀者對(duì)象:適合本書(shū)的讀者群體包括: 1. 有一定編程經(jīng)驗(yàn),想要學(xué)習(xí)Rust的初學(xué)者。 2. 對(duì)Rust有一定了解,還想對(duì)Rust深入學(xué)習(xí)的進(jìn)階者。 本書(shū)不適合完全沒(méi)有編程基礎(chǔ)的人學(xué)習(xí)。
Rust 是一門(mén)利用現(xiàn)代化的類(lèi)型系統(tǒng),有機(jī)地融合了內(nèi)存管理、所有權(quán)語(yǔ)義和混合編程范式的編程語(yǔ)言。它不僅能科學(xué)地保證程序的正確性,還能保證內(nèi)存安全和線程安全。同時(shí),還有能與C/C++語(yǔ)言媲美的性能,以及能和動(dòng)態(tài)語(yǔ)言媲美的開(kāi)發(fā)效率。本書(shū)并非對(duì)語(yǔ)法內(nèi)容進(jìn)行簡(jiǎn)單羅列講解,而是從四個(gè)維度深入全面且通透地介紹了Rust 語(yǔ)言。從設(shè)計(jì)哲學(xué)出發(fā),探索Rust 語(yǔ)言的內(nèi)在一致性;從源碼分析入手,探索Rust 地道的編程風(fēng)格;從工程角度著手,探索Rust 對(duì)健壯性的支持;從底層原理開(kāi)始,探索Rust 內(nèi)存安全的本質(zhì)。本書(shū)涵蓋了Rust 2018 的特性,適合有一定編程經(jīng)驗(yàn)且想要學(xué)習(xí)Rust 的初學(xué)者,以及對(duì)Rust 有一定的了解,想要繼續(xù)深入學(xué)習(xí)的進(jìn)階者。
張漢東,80后,資深軟件工程師、企業(yè)獨(dú)立咨詢師、技術(shù)作者譯者。愛(ài)好讀書(shū)、寫(xiě)作,喜歡研究技術(shù)、學(xué)習(xí)之道,以及心智和認(rèn)知開(kāi)發(fā)模式。曾在互聯(lián)網(wǎng)行業(yè)沉浮十余載,先后效力于電商、社交游戲、廣告和眾籌領(lǐng)域。作為企業(yè)獨(dú)立咨詢師,先后為思科、平安科技和閃迪等公司提供咨詢服務(wù)。目前在心智教育及創(chuàng)客領(lǐng)域開(kāi)疆拓土。是《Ruby原理剖析》一書(shū)的譯者。喜歡Rust語(yǔ)言,為Rust語(yǔ)言提交了三次編譯器Bug,并協(xié)助修復(fù)其中之一。為官方Rust 2018 Guide做過(guò)貢獻(xiàn),并數(shù)次提出改進(jìn)意見(jiàn)。參與了國(guó)內(nèi)Rust社區(qū)的管理和運(yùn)營(yíng),在2018年打造了《Rust每日新聞》頻道,深受Rustacean們的喜愛(ài)。為初學(xué)者精心打造了Rust必學(xué)第一課:知乎Live《如何系統(tǒng)地學(xué)習(xí)Rust語(yǔ)言》,獲得五星好評(píng)。
第1 章 新時(shí)代的語(yǔ)言 .................................................................................................. 1
1.1 緣起 ........................................................................................................................... 1
1.2 設(shè)計(jì)哲學(xué) ................................................................................................................... 3
1.2.1 內(nèi)存安全....................................................................................................... 3
1.2.2 零成本抽象 ................................................................................................... 4
1.2.3 實(shí)用性 .......................................................................................................... 5
1.3 現(xiàn)狀與未來(lái) ............................................................................................................... 7
1.3.1 語(yǔ)言架構(gòu)....................................................................................................... 8
1.3.2 開(kāi)源社區(qū)....................................................................................................... 9
1.3.3 發(fā)展前景....................................................................................................... 9
1.4 Rust 代碼如何執(zhí)行 ................................................................................................ 10
1.5 小結(jié) ......................................................................................................................... 10
第2 章 語(yǔ)言精要 ........................................................................................................ 11
2.1 Rust 語(yǔ)言的基本構(gòu)成 ............................................................................................. 11
2.1.1 語(yǔ)言規(guī)范..................................................................................................... 11
2.1.2 編譯器 ........................................................................................................ 12
2.1.3 核心庫(kù) ........................................................................................................ 12
2.1.4 標(biāo)準(zhǔn)庫(kù) ........................................................................................................ 12
2.1.5 包管理器..................................................................................................... 13
2.2 語(yǔ)句與表達(dá)式 ......................................................................................................... 13
2.3 變量與綁定 ............................................................................................................. 14
2.3.1 位置表達(dá)式和值表達(dá)式 ............................................................................. 15
2.3.2 不可變綁定與可變綁定 ............................................................................. 15
2.3.3 所有權(quán)與引用 ............................................................................................. 16
2.4 函數(shù)與閉包 ............................................................................................................. 17
2.4.1 函數(shù)定義..................................................................................................... 17
2.4.2 作用域與生命周期 ..................................................................................... 18
2.4.3 函數(shù)指針..................................................................................................... 19
2.4.5 CTFE 機(jī)制 .................................................................................................. 20
2.4.6 閉包 ............................................................................................................ 20
2.5 流程控制 ................................................................................................................. 22
2.5.1 條件表達(dá)式 ................................................................................................. 22
2.5.2 循環(huán)表達(dá)式 ................................................................................................. 23
2.5.3 match 表達(dá)式與模式匹配 .......................................................................... 24
2.5.4 if let 和while let 表達(dá)式 ............................................................................ 25
2.6 基本數(shù)據(jù)類(lèi)型 ......................................................................................................... 26
2.6.1 布爾類(lèi)型..................................................................................................... 26
2.6.2 基本數(shù)字類(lèi)型 ............................................................................................. 26
2.6.3 字符類(lèi)型..................................................................................................... 27
2.6.4 數(shù)組類(lèi)型..................................................................................................... 28
2.6.5 范圍類(lèi)型..................................................................................................... 29
2.6.6 切片類(lèi)型..................................................................................................... 29
2.6.7 str 字符串類(lèi)型 ............................................................................................ 30
2.6.8 原生指針..................................................................................................... 31
2.6.9 never 類(lèi)型 ................................................................................................... 31
2.7 復(fù)合數(shù)據(jù)類(lèi)型 ......................................................................................................... 32
2.7.1 元組 ............................................................................................................ 32
2.7.2 結(jié)構(gòu)體 ........................................................................................................ 33
2.7.3 枚舉體 ........................................................................................................ 36
2.8 常用集合類(lèi)型 ......................................................................................................... 38
2.8.1 線性序列:向量 ......................................................................................... 38
2.8.2 線性序列:雙端隊(duì)列 ................................................................................. 39
2.8.3 線性序列:鏈表 ......................................................................................... 40
2.8.4 Key-Value 映射表:HashMap 和BTreeMap ............................................ 40
2.8.5 集合:HashSet 和BTreeSet ...................................................................... 41
2.8.6 優(yōu)先隊(duì)列:BinaryHeap ............................................................................. 42
2.9 智能指針 ................................................................................................................. 42
2.10 泛型和trait ........................................................................................................... 43
2.10.1 泛型 .......................................................................................................... 43
2.10.2 trait ............................................................................................................ 44
2.11 錯(cuò)誤處理 ............................................................................................................... 47
2.12 表達(dá)式優(yōu)先級(jí) ....................................................................................................... 48
2.13 注釋與打印 ........................................................................................................... 48
2.14 小結(jié) ....................................................................................................................... 50
第3 章 類(lèi)型系統(tǒng) ........................................................................................................ 51
3.1 通用概念 ................................................................................................................. 51
3.1.1 類(lèi)型系統(tǒng)的作用 ......................................................................................... 51
3.1.2 類(lèi)型系統(tǒng)的分類(lèi) ......................................................................................... 52
3.1.3 類(lèi)型系統(tǒng)與多態(tài)性 ..................................................................................... 53
3.2 Rust 類(lèi)型系統(tǒng)概述 ................................................................................................ 53
3.2.1 類(lèi)型大小..................................................................................................... 53
3.2.2 類(lèi)型推導(dǎo)..................................................................................................... 58
3.3 泛型 ......................................................................................................................... 60
3.3.1 泛型函數(shù)..................................................................................................... 60
3.3.2 泛型返回值自動(dòng)推導(dǎo) ................................................................................. 62
3.4 深入trait ................................................................................................................. 62
3.4.1 接口抽象..................................................................................................... 63
3.4.2 泛型約束..................................................................................................... 69
3.4.3 抽象類(lèi)型..................................................................................................... 71
3.4.4 標(biāo)簽trait ..................................................................................................... 77
3.5 類(lèi)型轉(zhuǎn)換 ................................................................................................................. 83
3.5.1 Deref 解引用 .............................................................................................. 83
3.5.2 as 操作符 .................................................................................................... 86
3.5.3 From 和Into ............................................................................................... 88
3.6 當(dāng)前trait 系統(tǒng)的不足 ............................................................................................ 89
3.6.1 孤兒規(guī)則的局限性 ..................................................................................... 90
3.6.2 代碼復(fù)用的效率不高 ................................................................................. 91
3.6.3 抽象表達(dá)能力有待改進(jìn) ............................................................................. 93
3.7 小結(jié) ......................................................................................................................... 94
第4 章 內(nèi)存管理 ........................................................................................................ 95
4.1 通用概念 ................................................................................................................. 95
4.1.1 棧 ................................................................................................................ 96
4.1.2 堆 ................................................................................................................ 99
4.1.3 內(nèi)存布局................................................................................................... 101
4.2 Rust 中的資源管理 ...............................................................................................103
4.2.1 變量和函數(shù) ............................................................................................... 103
4.2.2 智能指針與RAII ..................................................................................... 106
4.2.3 內(nèi)存泄漏與內(nèi)存安全 ............................................................................... 110
4.2.4 復(fù)合類(lèi)型的內(nèi)存分配和布局 ................................................................... 115
4.3 小結(jié) ........................................................................................................................ 117
第5 章 所有權(quán)系統(tǒng) .................................................................................................. 119
5.1 通用概念 ................................................................................................................120
5.2 所有權(quán)機(jī)制 ............................................................................................................123
5.3 綁定、作用域和生命周期 ....................................................................................125
5.3.1 不可變與可變 ........................................................................................... 126
5.3.2 綁定的時(shí)間屬性——生命周期 ............................................................... 127
5.4 所有權(quán)借用 ............................................................................................................131
5.5 生命周期參數(shù) ........................................................................................................135
5.5.1 顯式生命周期參數(shù) ................................................................................... 136
5.5.2 省略生命周期參數(shù) ................................................................................... 143
5.5.3 生命周期限定 ........................................................................................... 145
5.5.4 trait 對(duì)象的生命周期 ............................................................................... 145
5.6 智能指針與所有權(quán) ................................................................................................146
5.6.1 共享所有權(quán) Rc<T>和Weak<T> ............................................................ 149
5.6.2 內(nèi)部可變性Cell<T>和RefCell<T> ........................................................ 151
5.6.3 寫(xiě)時(shí)復(fù)制Cow<T> ................................................................................... 153
5.7 并發(fā)安全與所有權(quán) ................................................................................................156
5.8 非詞法作用域生命周期 ........................................................................................157
5.9 小結(jié) ........................................................................................................................161
第6 章 函數(shù)、閉包與迭代器.................................................................................... 162
6.1 函數(shù) ........................................................................................................................162
6.1.1 函數(shù)屏蔽................................................................................................... 164
6.1.2 函數(shù)參數(shù)模式匹配 ................................................................................... 164
6.1.3 函數(shù)返回值 ............................................................................................... 165
6.1.4 泛型函數(shù)................................................................................................... 166
6.1.5 方法與函數(shù) ............................................................................................... 167
6.1.6 高階函數(shù)................................................................................................... 168
6.2 閉包 ........................................................................................................................171
6.2.1 閉包的基本語(yǔ)法 ....................................................................................... 172
6.2.2 閉包的實(shí)現(xiàn) ............................................................................................... 173
6.2.3 閉包與所有權(quán) ........................................................................................... 178
6.2.4 閉包作為函數(shù)參數(shù)和返回值 ................................................................... 184
6.2.5 高階生命周期 ........................................................................................... 190
6.3 迭代器 ....................................................................................................................194
6.3.1 外部迭代器和內(nèi)部迭代器 ....................................................................... 194
6.3.2 Iterator trait ............................................................................................... 195
6.3.3 IntoIterator trait 和迭代器 ........................................................................ 199
6.3.4 迭代器適配器 ........................................................................................... 202
6.3.5 消費(fèi)器 ...................................................................................................... 207
6.3.6 自定義迭代器適配器 ............................................................................... 211
6.4 小結(jié) ........................................................................................................................214
第7 章 結(jié)構(gòu)化編程 .................................................................................................. 216
7.1 面向?qū)ο箫L(fēng)格編程 ................................................................................................217
7.1.1 結(jié)構(gòu)體 ...................................................................................................... 217
7.1.2 枚舉體 ...................................................................................................... 225
7.1.3 析構(gòu)順序................................................................................................... 230
7.2 常用設(shè)計(jì)模式 ........................................................................................................233
7.2.1 建造者模式 ............................................................................................... 234
7.2.2 訪問(wèn)者模式 ............................................................................................... 236
7.2.3 RAII 模式 ................................................................................................. 239
7.3 小結(jié) ........................................................................................................................243
第8 章 字符串與集合類(lèi)型 ....................................................................................... 244
8.1 字符串 ....................................................................................................................244
8.1.1 字符編碼................................................................................................... 244
8.1.2 字符 .......................................................................................................... 247
8.1.3 字符串分類(lèi) ............................................................................................... 249
8.1.4 字符串的兩種處理方式 ........................................................................... 251
8.1.5 字符串的修改 ........................................................................................... 253
8.1.6 字符串的查找 ........................................................................................... 256
8.1.7 與其他類(lèi)型相互轉(zhuǎn)換 ............................................................................... 265
8.1.8 回顧 .......................................................................................................... 270
8.2 集合類(lèi)型 ................................................................................................................271
8.2.1 動(dòng)態(tài)可增長(zhǎng)數(shù)組 ....................................................................................... 271
8.2.2 映射集 ...................................................................................................... 281
8.3 理解容量 ................................................................................................................289
8.4 小結(jié) ........................................................................................................................292
第9 章 構(gòu)建健壯的程序 ........................................................................................... 294
9.1 通用概念 ................................................................................................................294
9.2 消除失敗 ................................................................................................................295
9.3 分層處理錯(cuò)誤 ........................................................................................................297
9.3.1 可選值Option<T> .................................................................................... 298
9.3.2 錯(cuò)誤處理Result<T, E> ............................................................................ 302
9.4 恐慌(Panic) .......................................................................................................314
9.5 第三方庫(kù) ................................................................................................................316
9.6 小結(jié) ........................................................................................................................319
第10 章 模塊化編程 ................................................................................................ 320
10.1 包管理 ..................................................................................................................321
10.1.1 使用Cargo 創(chuàng)建包 ................................................................................. 321
10.1.2 使用第三方包 ......................................................................................... 323
10.1.3 Cargo.toml 文件格式 .............................................................................. 331
10.1.4 自定義Cargo .......................................................................................... 337
10.2 模塊系統(tǒng) ..............................................................................................................339
10.3 從零開(kāi)始實(shí)現(xiàn)一個(gè)完整功能包 ..........................................................................344
10.3.1 使用Cargo 創(chuàng)建新項(xiàng)目 ......................................................................... 345
10.3.2 使用structopt 解析命令行參數(shù) ............................................................. 345
10.3.3 定義統(tǒng)一的錯(cuò)誤類(lèi)型 ............................................................................. 347
10.3.4 讀取CSV 文件 ....................................................................................... 348
10.3.5 替換CSV 文件中的內(nèi)容 ....................................................................... 351
10.3.6 進(jìn)一步完善包 ......................................................................................... 353
10.4 可見(jiàn)性和私有性 ..................................................................................................358
10.5 小結(jié) ......................................................................................................................360
第11 章 安全并發(fā) .................................................................................................... 362
11.1 通用概念 ..............................................................................................................362
11.1.1 多進(jìn)程和多線程 ..................................................................................... 363
11.1.2 事件驅(qū)動(dòng)、異步回調(diào)和協(xié)程 ................................................................. 364
11.1.3 線程安全 ................................................................................................. 365
11.2 多線程并發(fā)編程 ..................................................................................................370
11.2.1 線程管理 ................................................................................................. 371
11.2.2 Send 和Sync ........................................................................................... 375
11.2.3 使用鎖進(jìn)行線程同步 ............................................................................. 379
11.2.4 屏障和條件變量 ..................................................................................... 384
11.2.5 原子類(lèi)型 ................................................................................................. 386
11.2.6 使用Channel 進(jìn)行線程間通信 .............................................................. 388
11.2.7 內(nèi)部可變性探究 ..................................................................................... 397
11.2.8 線程池 ..................................................................................................... 399
11.2.9 使用Rayon 執(zhí)行并行任務(wù) .................................................................... 407
11.2.10 使用Crossbeam .................................................................................... 409
11.3 異步并發(fā) ..............................................................................................................412
11.3.1 生成器 ..................................................................................................... 413
11.3.2 Future 并發(fā)模式 ..................................................................................... 418
11.3.3 async/await .............................................................................................. 421
11.4 數(shù)據(jù)并行 ..............................................................................................................428
11.4.1 什么是SIMD .......................................................................................... 429
11.4.2 在Rust 中使用SIMD............................................................................. 430
11.5 小結(jié) ......................................................................................................................434
第12 章 元編程 ....................................................................................................... 435
12.1 反射 ......................................................................................................................436
12.1.1 通過(guò)is 函數(shù)判斷類(lèi)型 ............................................................................ 436
12.1.2 轉(zhuǎn)換到具體類(lèi)型 ..................................................................................... 437
12.1.3 非靜態(tài)生命周期類(lèi)型 ............................................................................. 439
12.2 宏系統(tǒng) ..................................................................................................................440
12.2.1 起源 ........................................................................................................ 440
12.2.2 Rust 中宏的種類(lèi) .................................................................................... 441
12.2.3 編譯過(guò)程 ................................................................................................. 442
12.2.4 聲明宏 .................................................................................................... 445
12.2.5 過(guò)程宏 .................................................................................................... 458
12.3 編譯器插件 ..........................................................................................................472
12.4 小結(jié) ......................................................................................................................475
第13 章 超越安全的邊界 ......................................................................................... 477
13.1 Unsafe Rust 介紹 .................................................................................................477
13.1.1 Unsafe 語(yǔ)法 ............................................................................................ 478
13.1.2 訪問(wèn)和修改可變靜態(tài)變量 ..................................................................... 480
13.1.3 Union 聯(lián)合體 .......................................................................................... 480
13.1.4 解引用原生指針 ..................................................................................... 483
13.2 基于Unsafe 進(jìn)行安全抽象 .................................................................................484
13.2.1 原生指針 ................................................................................................. 484
13.2.2 子類(lèi)型與型變 ......................................................................................... 489
13.2.3 未綁定生命周期 ..................................................................................... 494
13.2.4 Drop 檢查 ............................................................................................... 495
13.2.5 NonNull<T>指針 .................................................................................... 505
13.2.6 Unsafe 與恐慌安全 ................................................................................ 508
13.2.7 堆內(nèi)存分配 ............................................................................................. 508
13.2.8 混合代碼內(nèi)存安全架構(gòu)三大原則 ......................................................... 510
13.3 和其他語(yǔ)言交互 ..................................................................................................510
13.3.1 外部函數(shù)接口 ......................................................................................... 510
13.3.2 與C/C++語(yǔ)言交互 ................................................................................. 514
13.3.3 使用Rust 提升動(dòng)態(tài)語(yǔ)言性能 ............................................................... 528
13.4 Rust 與WebAssembly .........................................................................................532
13.4.1 WebAssembly 要點(diǎn)介紹......................................................................... 533
13.4.2 使用Rust 開(kāi)發(fā)WebAssembly ............................................................... 539
13.4.3 打造WebAssembly 開(kāi)發(fā)生態(tài) ................................................................ 541
13.5 小結(jié) ......................................................................................................................543
附錄A Rust 開(kāi)發(fā)環(huán)境指南 ....................................................................................... 544
附錄B Rust 如何調(diào)試代碼 ....................................................................................... 549
你還可能感興趣
我要評(píng)論
|