認識 Rust
想寫出跟 C/C++ 一樣快、卻不容易出現記憶體錯誤的程式?Rust 就是為此而生的語言。
Rust 是一門編譯成原生機器碼的系統程式語言。它沒有垃圾回收(garbage collector, GC),卻能在編譯階段就擋下懸空指標(dangling pointer)、資料競爭(data race)等常見錯誤。代價是需要先理解它獨特的「所有權」規則,本站就是為了幫你用最短的路徑通過這一關。
為什麼學 Rust?
-
記憶體安全
編譯器檢查所有權與借用,不需要 GC 也能避免大多數記憶體錯誤。
-
效能接近 C/C++
直接編譯成機器碼,抽象化(如迭代器、泛型)不會帶來額外的執行期成本。
-
現代化工具鏈
Cargo 管理專案與套件,內建格式化、測試、文件與靜態檢查(clippy)。
-
應用範圍廣
命令列工具、網路服務、WebAssembly、嵌入式與系統軟體都常見。
最必須了解的 20%
Rust 的語法並不特別難,難的是所有權這個觀念。我認為最值得優先學會的 20%,是「一個核心,加上三組各四個重點」:
核心:三個所有權觀念
| 觀念 | 一句話說明 | 詳見 |
|---|---|---|
| 所有權(ownership) | 每個值只有一個擁有者,擁有者離開作用域就釋放資源 | 所有權與移動 |
| 借用(borrowing) | 用參照(&T、&mut T)暫時使用值,而不取走它 |
借用與參照 |
| 生命週期(lifetime) | 編譯器用來確保參照不會比它指向的值活得更久 | 生命週期 |
第一組:四個常用型別
| 型別 | 用途 | 詳見 |
|---|---|---|
數值與 bool/char |
整數(i32)、浮點數(f64)、布林、字元 |
變數與資料型別 |
String/&str |
擁有的字串與字串切片 | 字串與集合 |
Vec<T> |
可成長的陣列 | 字串與集合 |
HashMap<K, V> |
鍵值對照表 | 字串與集合 |
第二組:四個建模工具
| 工具 | 用途 | 詳見 |
|---|---|---|
struct |
把相關欄位組成一個型別,並用 impl 加上方法 |
結構體與方法 |
enum |
表示「可能是幾種情況之一」,搭配 match 處理 |
列舉與模式比對 |
trait |
定義共通行為,相當於其他語言的介面 | 泛型與 Trait |
| 泛型(generics) | 一份程式碼適用多種型別 | 泛型與 Trait |
第三組:四個語法與機制
| 語法 | 用途 | 詳見 |
|---|---|---|
| 控制流程 | if、loop/while/for、match |
控制流程 |
| 函式與閉包 | 函式、匿名函式(closure)與迭代器 | 函式、閉包與迭代器 |
| 錯誤處理 | Option、Result 與 ? 運算子 |
錯誤處理 |
| 模組與 Cargo | 用 crate 與模組組織程式,用 Cargo 建置與測試 | Cargo、模組與 Crate |
學習順序建議
先花時間把「核心」三個觀念搞懂,其餘內容在其他語言學過的話,多半只是換一種寫法。遇到編譯錯誤不必沮喪,Rust 的錯誤訊息通常會直接告訴你怎麼改。
學習路線
- 入門設定:安裝工具鏈、用 Cargo 跑出第一個程式。
- 基礎語法:變數、型別、控制流程與函式。
- 所有權:所有權、借用、生命週期,這是 Rust 的關鍵。
- 資料建模:結構體、列舉、字串與集合。
- 抽象與錯誤處理:泛型、trait、錯誤處理、閉包與迭代器。
- 進階主題:模組、測試、智慧指標與並行。
- 學習資源:官方文件、練習題與精選影音。
推薦影音
兩分半鐘看懂 Rust
簡述:Fireship 用約兩分半鐘介紹 Rust 的特色與所有權概念,適合第一次接觸、想先建立整體印象的人。
什麼是 Rust,為什麼值得學
簡述:微軟《Beginner's Series to Rust》系列的第 2 集,說明 Rust 的定位與優勢,可作為系列教學的起點。
更多依主題整理的影音,請見 影音教學總覽。