歡迎參加 Comprehensive Rust 🦀 課程
1.
講授課程
❱
1.1.
課程架構
1.2.
鍵盤快速鍵
1.3.
翻譯
2.
使用 Cargo
❱
2.1.
Rust 生態系統
2.2.
程式碼範例
2.3.
在本機執行 Cargo
第 1 天:上午
3.
歡迎
❱
3.1.
什麼是 Rust?
4.
Hello World!
❱
4.1.
簡短範例
5.
為什麼要使用 Rust?
❱
5.1.
編譯時期保證
5.2.
執行時期保證
5.3.
新潮的功能
6.
基本語法
❱
6.1.
純量型別
6.2.
複合型別
6.3.
參照
❱
6.3.1.
迷途參照
6.4.
切片
❱
6.4.1.
String 和 str
6.5.
函式
❱
6.5.1.
Rustdoc
6.5.2.
方法
6.5.3.
超載
7.
練習
❱
7.1.
隱含轉換
7.2.
陣列和 for 迴圈
第 1 天:下午
8.
控制流程
❱
8.1.
區塊
8.2.
if 表達式
8.3.
for 運算式
8.4.
while 運算式
8.5.
break 和 continue
8.6.
loop 運算式
9.
變數
❱
9.1.
型別推斷
9.2.
靜態和常數
9.3.
範圍和遮蔽
10.
列舉
❱
10.1.
變體負載
10.2.
列舉大小
11.
Novel Control Flow
❱
11.1.
if let 運算式
11.2.
while let 運算式
11.3.
match 運算式
12.
模式配對
❱
12.1.
解構列舉
12.2.
解構結構體
12.3.
解構陣列
12.4.
配對守衛
13.
練習
❱
13.1.
盧恩演算法
13.2.
模式配對 (未定)
第 2 天:上午
14.
歡迎
15.
記憶體管理
❱
15.1.
堆疊和堆積
15.2.
堆疊記憶體
15.3.
手動記憶體管理
15.4.
作用域式記憶體管理
15.5.
垃圾回收
15.6.
Rust 記憶體管理
16.
所有權
❱
16.1.
移動語意
16.2.
Rust 中移動的字串
❱
16.2.1.
現代 C++ 中的雙重釋放
16.3.
函式呼叫中的移動
16.4.
複製和克隆
16.5.
借用
❱
16.5.1.
共用借用和專屬借用
16.6.
生命週期
16.7.
函式呼叫中的生命週期
16.8.
資料結構中的生命週期
17.
結構體
❱
17.1.
元組結構體
17.2.
欄位簡寫語法
18.
方法
❱
18.1.
方法接收器
18.2.
範例
19.
練習
❱
19.1.
Storing Books
19.2.
健康統計資料
第 2 天:下午
20.
標準函式庫
❱
20.1.
Option 和 Result
20.2.
String
20.3.
Vec
20.4.
HashMap
20.5.
Box
❱
20.5.1.
遞迴資料型別
20.5.2.
區位最佳化
20.6.
Rc
20.7.
Cell/RefCell
21.
模組
❱
21.1.
能見度
21.2.
路徑
21.3.
檔案系統階層
22.
練習
❱
22.1.
疊代器和擁有權
22.2.
字串和疊代器
第 3 天:上午
23.
歡迎
24.
泛型
❱
24.1.
泛型資料型別
24.2.
泛型方法
24.3.
單型化
25.
特徵
❱
25.1.
特徵物件
25.2.
衍生特徵
25.3.
預設方法
25.4.
特徵界限
25.5.
impl Trait
26.
重要特徵
❱
26.1.
疊代器
26.2.
FromIterator
26.3.
From 和 Into
26.4.
Read 和 Write
26.5.
Drop
26.6.
Default
26.7.
運算子:Add、Mul、...
26.8.
閉包:Fn、FnMut、FnOnce
27.
練習
❱
27.1.
簡易 GUI 程式庫
27.2.
點和多邊形
第 3 天:下午
28.
錯誤處理
❱
28.1.
恐慌
❱
28.1.1.
捕獲解開堆疊的動作
28.2.
結構化錯誤處理
28.3.
使用 ? 傳播錯誤
❱
28.3.1.
轉換錯誤型別
❱
28.3.1.1.
範例
28.3.2.
推導錯誤列舉
28.3.3.
動態錯誤型別
28.3.4.
為錯誤添加背景資訊
29.
測試
❱
29.1.
單元測試
29.2.
測試模組
29.3.
說明文件測試
29.4.
整合測試
29.5.
實用的 Crate
30.
不安全的 Rust
❱
30.1.
對裸指標解參考
30.2.
可變的靜態變數
30.3.
聯合體
30.4.
呼叫不安全的函式
❱
30.4.1.
編寫不安全的函式
30.4.2.
Extern 函式
30.5.
實作不安全的特徵
31.
練習
❱
31.1.
安全的 FFI 包裝函式
Android
32.
歡迎
33.
設定
34.
建構規則
❱
34.1.
二進位檔
34.2.
函式庫
35.
AIDL
❱
35.1.
介面
35.2.
實作
35.3.
伺服器
35.4.
部署
35.5.
用戶端
35.6.
改寫 API
36.
記錄
37.
互通性
❱
37.1.
與 C 的互通性
❱
37.1.1.
使用 Bindgen 呼叫 C
37.1.2.
從 C 呼叫 Rust
37.2.
與 C++ 的互通性
37.3.
與 Java 的互通性
38.
練習
裸機開發:上午
39.
歡迎
40.
no_std
❱
40.1.
最小限度範例
40.2.
alloc
41.
微控制器
❱
41.1.
原始 MMIO
41.2.
PAC
41.3.
HAL Crates
41.4.
開發板支援 Crate
41.5.
型別狀態模式
41.6.
embedded-hal
41.7.
probe-rs、cargo-embed
❱
41.7.1.
偵錯
41.8.
其他專案
42.
練習
❱
42.1.
指南針
裸機開發:下午
43.
應用程式處理器
❱
43.1.
準備使用 Rust
43.2.
行內組語
43.3.
MMIO
43.4.
編寫 UART 驅動程式
❱
43.4.1.
其他特徵
43.5.
經改良的 UART 驅動程式
❱
43.5.1.
Bitflags
43.5.2.
多個暫存器
43.5.3.
驅動程式
43.5.4.
開始使用
43.6.
記錄
❱
43.6.1.
開始使用
43.7.
例外狀況
43.8.
其他專案
44.
實用的 Crate
❱
44.1.
zerocopy
44.2.
aarch64-paging
44.3.
buddy_system_allocator
44.4.
tinyvec
44.5.
旋轉
45.
Android
❱
45.1.
vmbase
46.
練習
❱
46.1.
RTC 驅動程式
並行:上午
47.
歡迎
48.
執行緒
❱
48.1.
限定範圍執行緒
49.
通道
❱
49.1.
無界限的通道
49.2.
有界限的通道
50.
Send 和 Sync
❱
50.1.
Send
50.2.
Sync
50.3.
範例
51.
共享狀態
❱
51.1.
Arc
51.2.
Mutex
51.3.
範例
52.
練習
❱
52.1.
哲學家就餐問題
52.2.
多執行緒連結檢查器
並行:下午
53.
Async 基本概念
❱
53.1.
async/await
53.2.
Futures
53.3.
Runtimes
❱
53.3.1.
Tokio
53.4.
工作
53.5.
非同步管道
54.
控制流程
❱
54.1.
加入
54.2.
選取
55.
陷阱
❱
55.1.
阻占執行器
55.2.
釘選
55.3.
非同步特徵
55.4.
Cancellation
56.
練習
❱
56.1.
哲學家就餐問題
56.2.
廣播聊天應用程式
結語
57.
謝謝!
58.
其他資源
59.
出處清單
解決方案
60.
解決方案
❱
60.1.
第 1 天上午
60.2.
第 1 天下午
60.3.
第 2 天上午
60.4.
第 2 天下午
60.5.
第 3 天上午
60.6.
第 3 天下午
60.7.
Rust 裸機開發:上午
60.8.
Rust 裸機開發:下午
60.9.
並行:上午
60.10.
並行:下午
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Korean (한국어)
Spanish (Español)
Novel Control Flow
Rust 的某些控制流程結構與其他程式語言不同。這些結構會用於模式配對:
if let
運算式
while let
expressions
match
運算式