歡迎參加 Comprehensive Rust 🦀 課程
1.
講授課程
❱
1.1.
課程架構
1.2.
鍵盤快速鍵
1.3.
翻譯
2.
使用 Cargo
❱
2.1.
Rust 生態系統
2.2.
程式碼範例
2.3.
在本機執行 Cargo
第 1 天:上午
3.
歡迎
4.
Hello, World
❱
4.1.
什麼是 Rust?
4.2.
Rust 的優點
4.3.
Playground
5.
型別和值
❱
5.1.
Hello, World
5.2.
變數
5.3.
值
5.4.
算術
5.5.
字串 (String)
5.6.
型別推斷
5.7.
練習:費波那契數列
❱
5.7.1.
解決方案
6.
基本的控制流程概念
❱
6.1.
if 表達式
6.2.
for 迴圈
❱
6.2.1.
for
6.2.2.
loop 迴圈
6.3.
break 和 continue
❱
6.3.1.
標籤
6.4.
區塊 (block) 和範疇 (scope)
❱
6.4.1.
範圍和遮蔽
6.5.
函式
6.6.
巨集
6.7.
練習:考拉茲序列
❱
6.7.1.
解決方案
第 1 天:下午
7.
歡迎
8.
元組和陣列
❱
8.1.
陣列
8.2.
元組
8.3.
疊代器
8.4.
模式配對
8.5.
練習:巢狀陣列
❱
8.5.1.
解決方案
9.
參照
❱
9.1.
共用列舉
9.2.
迷途參照
9.3.
練習:幾何圖形
❱
9.3.1.
解決方案
10.
使用者定義的型別
❱
10.1.
結構體
10.2.
元組結構體
10.3.
列舉
10.4.
靜態和常數
10.5.
型別別名
10.6.
練習:電梯事件
❱
10.6.1.
解決方案
第 2 天:上午
11.
歡迎
12.
模式配對
❱
12.1.
Matching Values
12.2.
解構列舉
12.3.
控制流程
12.4.
練習:運算式求值
❱
12.4.1.
解決方案
13.
Read 和 Write
❱
13.1.
方法
13.2.
特徵
❱
13.2.1.
實作不安全的特徵
13.2.2.
Associated Types
13.3.
衍生特徵
13.4.
練習:泛型 Logger
❱
13.4.1.
解決方案
14.
泛型
❱
14.1.
Extern 函式
14.2.
泛型資料型別
14.3.
特徵界限
14.4.
impl Trait
14.5.
練習:泛型 min
❱
14.5.1.
解決方案
第 2 天:下午
15.
歡迎
16.
標準函式庫
❱
16.1.
標準函式庫
16.2.
說明文件測試
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
練習:計數器
❱
16.8.1.
解決方案
17.
標準函式庫
❱
17.1.
比較
17.2.
疊代器
17.3.
From 和 Into
17.4.
測試
17.5.
Read 和 Write
17.6.
Default (結構體更新語法)
17.7.
閉包
17.8.
練習:ROT13 (迴轉13位)
❱
17.8.1.
解決方案
第 3 天:上午
18.
歡迎
19.
記憶體管理
❱
19.1.
檢查程式記憶體
19.2.
自動記憶體管理
19.3.
所有權
19.4.
移動語意
19.5.
Clone
19.6.
Copy 型別
19.7.
Drop
19.8.
練習:建構工具型別
❱
19.8.1.
解決方案
20.
智慧指標
❱
20.1.
Box<T>
20.2.
Rc
20.3.
特徵物件
20.4.
練習:二元樹
❱
20.4.1.
解決方案
第 3 天:下午
21.
歡迎
22.
借用
❱
22.1.
借用
22.2.
借用
22.3.
內部可變性 (Interior Mutability)
22.4.
練習:衛生統計資料
❱
22.4.1.
解決方案
23.
生命週期
❱
23.1.
Slices: &\[T\]
23.2.
迷途參照
23.3.
函式呼叫中的生命週期
23.4.
生命週期
23.5.
生命週期
23.6.
練習:Protobuf 剖析
❱
23.6.1.
解決方案
第 4 天:上午
24.
歡迎
25.
疊代器
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
練習:疊代器方法鏈結
❱
25.4.1.
解決方案
26.
模組
❱
26.1.
模組
26.2.
檔案系統階層
26.3.
能見度
26.4.
use、super、self
26.5.
練習:GUI 程式庫的模組
❱
26.5.1.
解決方案
27.
測試
❱
27.1.
測試模組
27.2.
其他資源
27.3.
編譯器檢查 (Lint) 和 Clippy
27.4.
盧恩演算法
❱
27.4.1.
解決方案
第 4 天:下午
28.
歡迎
29.
錯誤處理
❱
29.1.
恐慌
29.2.
疊代器
29.3.
隱含轉換
29.4.
Drop 特徵
29.5.
From 和 Into
29.6.
使用 Result 進行結構化錯誤處理
❱
29.6.1.
解決方案
30.
不安全的 Rust
❱
30.1.
不安全的 Rust
30.2.
對裸指標解參考
30.3.
可變的靜態變數
30.4.
聯合體
30.5.
呼叫不安全的函式
30.6.
實作不安全的特徵
30.7.
練習:封裝外部函式介面 (FFI)
❱
30.7.1.
解決方案
Android
31.
歡迎
32.
設定
33.
建構規則
❱
33.1.
二進位檔
33.2.
函式庫
34.
AIDL
❱
34.1.
Birthday Service Tutorial
❱
34.1.1.
介面
34.1.2.
Service API
34.1.3.
伺服器
34.1.4.
伺服器
34.1.5.
部署
34.1.6.
用戶端
34.1.7.
改寫 API
34.1.8.
實作
34.2.
類型
❱
34.2.1.
Primitive Types
34.2.2.
陣列
34.2.3.
特徵物件
34.2.4.
變數
34.2.5.
Sending Files
35.
測試
❱
35.1.
GoogleTest
35.2.
模擬 (Mocking)
36.
記錄
37.
互通性
❱
37.1.
與 C 的互通性
❱
37.1.1.
使用 Bindgen 呼叫 C
37.1.2.
從 C 呼叫 Rust
37.2.
與 C++ 的互通性
❱
37.2.1.
測試模組
37.2.2.
Rust 橋接器
37.2.3.
產生的 C++
37.2.4.
C++ 橋接器
37.2.5.
共用型別
37.2.6.
共用列舉
37.2.7.
錯誤處理
37.2.8.
錯誤處理
37.2.9.
其他型別
37.2.10.
針對 Android 建構:C++
37.2.11.
針對 Android 建構:Genrules
37.2.12.
針對 Android 建構:Rust
37.3.
與 Java 的互通性
38.
練習
Chromium
39.
歡迎
40.
設定
41.
比較 Chromium 和 Cargo 的生態系統
42.
政策
43.
建構規則
❱
43.1.
不安全的 Rust
43.2.
在 Chromium C++ 中使用 Rust 程式碼
43.3.
Visual Studio Code
43.4.
練習
44.
測試
❱
44.1.
rust_gtest_interop 程式庫
44.2.
Rust 測試適用的 GN 規則
44.3.
chromium::import! 巨集
44.4.
練習
45.
互通性
❱
45.1.
範例
45.2.
CXX 的限制
45.3.
錯誤處理
❱
45.3.1.
錯誤處理
45.3.2.
錯誤處理
45.4.
在 Chromium 中使用 CXX
45.5.
練習
46.
新增第三方 Crate
❱
46.1.
設定 Cargo.toml
46.2.
設定 gnrt_config.toml
46.3.
下載 Crate
46.4.
產生 gn 建構規則
46.5.
解決問題
❱
46.5.1.
建構用於產生程式碼的指令碼
46.5.2.
建構用於建立 C++ 或執行任意動作的指令碼
46.6.
使用 Crate
46.7.
程式庫審查和稽核
46.8.
提交為 Chromium 原始碼
46.9.
保持 Crate 為最新版本
46.10.
練習
47.
融會貫通 - 練習題
48.
練習題的參考答案
裸機開發:上午
49.
歡迎
50.
no_std
❱
50.1.
最小限度的範例
50.2.
alloc
51.
微控制器
❱
51.1.
原始 MMIO
51.2.
PAC
51.3.
HAL Crates
51.4.
開發板支援 Crate
51.5.
型別狀態模式
51.6.
embedded-hal
51.7.
probe-rs、cargo-embed
❱
51.7.1.
偵錯
51.8.
其他專案
52.
練習
❱
52.1.
指南針
52.2.
解決方案
裸機開發:下午
53.
應用程式處理器
❱
53.1.
準備使用 Rust
53.2.
行內組語
53.3.
MMIO
53.4.
編寫 UART 驅動程式
❱
53.4.1.
其他特徵
53.5.
經改良的 UART 驅動程式
❱
53.5.1.
Bitflags
53.5.2.
多個暫存器
53.5.3.
驅動程式
53.5.4.
開始使用
53.6.
記錄
❱
53.6.1.
開始使用
53.7.
例外狀況
53.8.
其他專案
54.
實用的 Crate
❱
54.1.
zerocopy
54.2.
aarch64-paging
54.3.
buddy_system_allocator
54.4.
tinyvec
54.5.
spin
55.
Android
❱
55.1.
vmbase
56.
練習
❱
56.1.
RTC 驅動程式
56.2.
解決方案
並行:上午
57.
歡迎
58.
執行緒
❱
58.1.
限定範圍執行緒
59.
通道
❱
59.1.
無界限的通道
59.2.
有界限的通道
60.
Send 和 Sync
❱
60.1.
Send
60.2.
Sync
60.3.
範例
61.
共享狀態
❱
61.1.
Arc
61.2.
Mutex
61.3.
範例
62.
練習
❱
62.1.
哲學家就餐問題
62.2.
多執行緒連結檢查器
62.3.
解決方案
並行:下午
63.
Async 基本概念
❱
63.1.
async/await
63.2.
Futures
63.3.
Runtimes
❱
63.3.1.
Tokio
63.4.
工作
63.5.
非同步管道
64.
控制流程
❱
64.1.
加入
64.2.
選取
65.
陷阱
❱
65.1.
阻占執行器
65.2.
Pin
65.3.
非同步特徵
65.4.
安裝
66.
練習
❱
66.1.
哲學家就餐問題
66.2.
廣播聊天應用程式
66.3.
解決方案
結語
67.
謝謝!
68.
詞彙解釋
69.
其他資源
70.
出處清單
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Japanese (日本語)
Korean (한국어)
Spanish (Español)
Ukrainian (українська)
共享狀態
Rust 會使用型別系統強制同步共享的資料,主要透過兩種型別 執行:
Arc<T>
,原子參考計數為
T
:處理執行緒間的共享狀態, 並且在最後參考被丟棄時負責釋放
T
的記憶體。
Mutex<T>
:確保能提供
T
值的可變專屬存取權。