Rust程序設計(高級篇)
[加]鄭宇、黃立群、[加]沈剛、黃曉濤、全麗莉
商品描述
"本書是Rust程序設計系列的第二本,對於真正學習Rust編程語言的讀者來說,本書也是最重要的部分。本書涵蓋所有Rust編程語言的高級特性,包括屬性(Attribute)、泛型(Generic)、引用(Reference)、指針(Pointer)、所有權機制(Ownership)、生命周期(Lifecycle)、閉包(Closure)、疊代器(iterator)、Crate和mod、Trait和Trait對象,線程編程(Thread)、異步編程(Async/Await)、宏(Macro)等。對於每個核心概念、組件和機制,書中都使用具體的例子進行了具體而微的講解。 本書的另一個重要原則是邊學習、邊實踐。在每章的學習中,本書引入豐富的例子講解Rust語言的基本要點。同時在本書的最後,筆者還編寫了專門的總結篇,說明如何利用已學知識編寫簡單實用的Rust小程序,綜合演示Rust各語言要件的使用方法。 本書配套的教學資源包括PPT、樣例代碼、視頻以及外部資源鏈接,可供讀者進一步學習使用。 "
目錄大綱
目錄
第1章Rust的高級特性
1.1屬性
1.1.1Trait的派生屬性
1.1.2條件編譯
1.1.3crate特征
1.1.4配置相關屬性
1.1.5其他常用的屬性
1.2泛型
1.2.1泛型函數
1.2.2泛型結構
1.2.3泛型數組和向量
1.2.4泛型枚舉
1.2.5泛型impl塊
1.2.6靜態分發
1.3通用集合類型
1.3.1向量
1.3.2雙端隊列
1.3.3鏈表
1.3.4二叉堆
1.3.5映射
1.3.6集合
1.3.7Hashing
1.4引用
1.4.1引用聲明
1.4.2引用的解引用
1.4.3引用規則
1.4.4多重引用
1.4.5引用比較
1.4.6切片和trait對象的引用
1.4.7引用的用法
1.5指針類型
1.5.1指針類型的大小
1.5.2原始指針
1.5.3BoxT
1.5.4析構函數
1.5.5引用計數類型
1.5.6內部可變性
1.5.7Cell和RefCell
1.5.8Box/Rc/Arc指針之間的轉換
1.5.9編寫自己的智能指針
1.5.10UnsafeCell
1.6類型轉換
1.6.1強制轉換
1.6.2transmute
1.7高級類型
1.7.1函數類型
1.7.2Unsized類型和?Sized
1.7.3發散函數和never類型
1.7.4聯合
1.7.5newtype模式
1.7.6類型別名
1.7.7資源獲取即初始化
1.8庫
1.9其他
1.9.1編譯時讀取文件
1.9.2虛位類型參量
1.9.3Any和反射
1.9.4內聯匯編
第2章所有權和借用
2.1所有權
2.2所有權示例
2.2.1String變量所有權
2.2.2向量所有權
2.2.3BoxT類型所有權
2.2.4結構所有權
2.3共享、復制和移動語義
2.4所有權規則
2.5借用檢查
2.6所有權轉移
2.6.1賦值
2.6.2通過函數參數給函數
2.6.3函數返回值的方式
2.6.4控制流裏的所有權轉移
2.6.5集合類型索引元素時的所有權轉移
2.6.6所有權轉移的特殊情況
2.7解決所有權引發的問題
2.7.1復制值
2.7.2借用
2.7.3共享語義
2.7.4減少使用長生命周期的變量
2.8總結
第3章生命周期
3.1作用域和生命周期
3.2生命周期聲明
3.2.1函數簽名
3.2.2結構
3.2.3impl塊
3.2.4高階生命周期
3.2.5枚舉
3.2.6閉包
3.2.7trait限定中的生命周期
3.2.8生命周期強制轉換
3.3生命周期省略
3.4引用的生命周期
3.4.1借用本地變量
3.4.2使用引用類型的函數參數
3.4.3使用引用作為函數參數的函數
3.4.4方法
3.4.5返回引用
3.4.6函數包含多個生命周期
3.5static
3.6生命周期子類型
3.7NLL
3.8Variance(型變)
3.9其他
第4章閉包
4.1為什麼需要使用閉包
4.2閉包聲明和使用
4.3閉包使用外部環境變量
4.4閉包實現
4.4.1Fn
4.4.2FnMut
4.4.3FnOnce
4.5閉包作為變量
4.6閉包作為函數輸入參數
4.7閉包作為函數返回值
4.8函數和閉包的區別
4.9閉包用法
第5章疊代子
5.1Iterator和IntoIterator traits
5.2典型疊代子的3種用法
5.2.1創建疊代子
5.2.2疊代子適配器
5.2.3消費疊代子
5.3常見的疊代子使用例
5.3.1字符串
5.3.2for循環
5.3.3疊代子的惰性
5.4為用戶自定義的類型實現疊代子
5.5第三方疊代庫
第6章crate和mod
6.1crate
6.1.1crate生成
6.1.2加載外部crate
6.1.3Prelude模塊
6.2mod
6.2.1內部模塊
6.2.2按文件組織的模塊
6.2.3按目錄組織的模塊
6.2.4多層嵌套模塊
6.2.5使用模塊
6.3訪問模塊內容
6.3.1訪問路徑
6.3.2可見性
6.4常用的第三方crate
6.4.1ansi_term
6.4.2datetime
6.4.3git2
6.4.4glob
6.4.5lazy_static
6.4.6libc
6.4.7locale
6.4.8log
6.4.9natord
6.4.10num_cpus
6.4.11number_prefix
6.4.12bitflag
6.4.13byteorder
6.4.14matches
6.4.15Pad
6.4.16scoped_threadpool
6.4.17term_grid
6.4.18term_size
6.4.19tinyvec
6.4.20unicodewidth
6.4.21url
6.4.22users
6.4.23zoneinfo_compiled
6.5總結
第7章trait和trait對象
7.1trait
7.1.1trait定義
7.1.2trait基本原則
7.1.3trait與內置類型
7.1.4trait的默認方法
7.1.5小結
7.2關聯常量
7.3關聯類型
7.3.1關聯類型聲明
7.3.2可讀性可擴展性
7.3.3何時使用關聯類型
7.3.4泛型關聯類型
7.4self和Self
7.5簡單traits
7.6繼承traits
7.7標記traits
7.8trait對象
7.8.1impl trait和dyn trait
7.8.2對象安全
7.8.3通用調用語法
7.8.4動態分發
7.8.5使用trait作為輸入/輸出參數
7.8.6返回trait
7.8.7錯誤處理例子
7.9泛型trait
7.9.1泛型的trait約束
7.9.2多trait約束
7.9.3where關鍵字
7.9.4用impl trait語法實現trait約束
7.9.5impl代碼塊的trait約束
7.10標準trait介紹
7.10.1派生
7.10.2Default
7.10.3Sized和?Sized
7.10.4AsRef和AsMut
7.10.5Borrow和BorrowMut
7.10.6ToOwned
7.10.7From和Into
7.10.8TryFrom和TryInto
7.10.9ToString和 Display&FromStr trait
7.10.10Deref和DerefMut
7.10.11Cow
第8章線程並發
8.1線程
8.1.1通過spawn函數創建
8.1.2定制化創建線程
8.1.3Scoped線程
8.2線程數據訪問
8.2.1statics
8.2.2leaking
8.2.3move
8.2.4Arc
8.3消息傳遞通道
8.3.1異步通道
8.3.2同步通道
8.4共享狀態
8.4.1互斥鎖
8.4.2讀寫鎖
8.4.3線程Park
8.4.4條件變量
8.4.5屏障類型
8.4.6原子類型
8.4.7線程本地存儲
8.5線程安全
8.5.1Send trait
8.5.2Sync trait
8.5.3總結
8.6並發
8.6.1多進程
8.6.2多線程
8.6.3異步
8.6.4向量化
8.6.5線程池
8.7其他第三方crate
第9章異步編程
9.1Future
9.1.1Future的分類
9.1.2Future的接口
9.1.3Future的執行
9.2異步編程通用模型——輪詢
9.2.1主流的並發模型
9.2.2Rust的異步模型
9.2.3總結
9.3生成器
9.3.1生成器的定義
9.3.2轉化Generator為Future
9.4async/await語法
9.4.1async fn函數
9.4.2async{}代碼塊
9.4.3await
9.5async/await的實現機制
9.6Pin
9.6.1自引用結構體的move
9.6.2Pin
9.6.3Unpin
9.6.4Pin總結
9.7Tokio
9.7.1非阻塞式I/O
9.7.2阻塞式I/O
9.8同時運行多個Future
9.8.1join!
9.8.2try_join!
9.8.3Select!
9.9從同步程序調用異步程序
9.10異步程序測試
9.10.1使用選用的異步框架支持的測試方法
9.10.2使用測試用運行時
9.11總結
第10章Rust函數式編程
10.1函數式編程簡介
10.2參數化類型
10.3閉包和函數
10.4語句
10.5鏈式調用
10.6高階函數
10.7面向對象
10.7.1算符重載
10.7.2多繼承
10.7.3多態
10.7.4重載
10.7.5靜態分派和動態分派
10.7.6方法和函數
10.7.7構造函數
10.7.8builder模式
10.7.9Visitor模式
10.8設計模式
10.8.1functor模式
10.8.2monad模式
10.8.3combinator模式
10.8.4延遲求值模式
10.9並發
第11章進階篇總結
11.1數據結構
11.1.1鏈表
11.1.2樹
11.1.3圖
11.2定時器
11.3數據爬蟲
11.3.1需求分析
11.3.2技術分析
11.3.3功能實現
11.3.4編譯運行
11.4Web應用編程
11.4.1Cargo設置
11.4.2main程序
11.4.3日誌配置
11.4.4錯誤處理
11.5數據庫應用編程
11.5.1用SQL語句操作Postgres/MySQL
11.5.2MongoDB
11.5.3連接池——r2d2
11.5.4Redis
11.5.5ORM庫
11.6以太坊智能合約應用編程
11.6.1鏈接節點
11.6.2塊信息
11.6.3基本的交易信息
11.6.4Wei到Eth的轉換函數
11.6.5與合約交互
11.7自定義鎖
11.7.1基本的最小化版本
11.7.2不安全的SpinLock
11.7.3提供安全的接口
11.8總結
第12章宏
12.1使用宏的時機
12.2內置宏
12.3宏的編譯過程
12.4聲明宏編程簡介
12.4.1衛生性
12.4.2宏聲明
12.4.3模式匹配與變量捕捉
12.4.4宏選擇器關鍵字
12.4.5宏工作機制
12.4.6重復構造
12.4.7宏的復雜用法
12.4.8宏的導入和導出
12.4.9聲明宏的錯誤處理
12.5高級宏例子
12.5.1println!宏
12.5.2宏生成運行測試案例
12.5.3實現Ruby的HashMap語法
12.5.4組合函數的宏
12.5.5宏重載
12.5.6批量轉換
12.6過程宏編程簡介
12.6.1用戶定義的派生宏
12.6.2屬性宏
12.6.3類函數宏
12.7全面聲明宏和過程宏的例子
12.7.1聲明宏的實現
12.7.2屬性宏實現
12.7.3類函數宏實現
12.7.4派生宏實現
12.7.5綜合使用例
12.8調試宏
12.9宏編程可能引發的問題
12.10必備宏crate
附錄詞匯表
參考文獻



