從 0 開始介紹 Rust。
- Official: https://www.rust-lang.org/
- 語法 - 半小時學習 Rust:https://fasterthanli.me/articles/a-half-hour-to-learn-rust
- Rust Playground: https://play.rust-lang.org/
- 安裝:Msys2 安裝
- IDE: Visual Studio Code / JetBrains CLion
- Standard Library: https://doc.rust-lang.org/std/
第 0 章 - 程式語言?
分類 | 行為 | 特點 | 舉例 |
---|---|---|---|
編譯 (Compile) | 翻譯(機器碼) | 極速,利於靜態分析,安全性 | C/C++, Rust, Fortran, Go, Haskell, ... |
直譯 (Interpret) | 邊跑邊看 | 啟動快,較依賴執行時錯誤 | CPython, shell, MATLAB, 大部份高階語言 |
Just-in-Time (JIT) | 邊跑邊翻譯 | 提升重複直譯的效能 | JavaScript, Java, C#, PyPy, ... |
- 控制流程 (Control Flow)
- 解包 (Unpacking) / 模式語法 (Pattern Syntax)
let
- 取代 return 語句 - 表達式 (Expression)
if
-else
else if
match
if let
loop
'a: loop
break 'a
continue 'a
- 非表達式
while
while let
for in
(詳見迭代器)
- 解包 (Unpacking) / 模式語法 (Pattern Syntax)
- 顯式轉型 (Explicit Type Transform)
- 二進位轉型
as
- 泛型轉型
From
TryFrom
/Into
TryInto
(稍後補充)
- 二進位轉型
- 顯式複製 (Explicit Copy)
Clone
/ 隱式複製 (Implicit Copy)Copy
- 物件導向 (Object Orientation)
- 函式 (Function)
fn
- 類型 (Type)
- 主要類型 (Primitive Types) (類型對應表)
- 元組 (Tuple)
(T, U, V)
- 陣列 (Array)
[T; N]
- 單元 (Unit)
()
- 結構體 (Structure)
struct
- 枚舉 (Enumeration)
enum
- 聯集 (Union)
union
- 類型別名 (Type Alias)
type T = U;
- 泛型邊界 (Generic Bounds)
- 特徵 (Trait)
trait
- 生命週期 (Lifetime)
'a
'static
- 常量變數 (Constant Variable)
const
- 特徵 (Trait)
- 函式 (Function)
- 專案 (Project)
crate
- 模組 (Module)
mod
- 可見性 (Visibility)
pub
- 導入 (Import)
use
- 模組 (Module)
- 安全性 (Safety)
- 記憶體安全性 (Memory Safety)
- 類型安全性 (Type Safety)
- 執行緒安全性 (Thread Safety)
- 借用檢查 (Borrow Check)
- 生指標 (Raw Pointer)
*const T
*mut T
- 參照 (Reference)
&T
&mut T
- 智慧指標 (Smart Pointer)
Box<T>
- 胖指標 (Fat Pointer)
&dyn T
Box<dyn T>
- 內部可變 (Interior Mutability)
Cell
RefCell
Atomic
Mutex
RwLock
- 參照計數器 (Reference Counter)
Rc
Arc
- 靜態變數 (Static Variable)
static
- Copy-On-Write
Cow
/ Unsized!Sized
/ 指標轉型 (教學)
- 生指標 (Raw Pointer)
- 取代 if-else 語句
Option
類型 - 「無 (None)」選項Result
類型 - 「錯誤 (Error)」選項
- 取代 for 迴圈
- 容器 (Collections)
- 動態陣列參照 (Slice)
&[T]
&mut [T]
- 字串 (String)
- ASCII
u8
&[u8]
Vec<u8>
- UTF-8
char
&str
String
- ASCII
- 迭代器 (Iterator)
Iterator
FromIterator
IntoIterator
- 摺疊程式碼
- 內嵌函式 (Inline Function)
#[inline] fn
- 常數函式 (Constant Function)
const fn
- 閉包 (Closure) (詳細教材)
- 巨集 (Macro)
- Function-like macro
xxx!()
xxx![]
xxx! {}
- Attribute macro
#[xxx]
#![xxx]
- Function-like macro
- 內嵌函式 (Inline Function)
- Command-Line Interface (CLI)
clap
- 命令行界面,可以客製化執行時的文字輸入選項,如 subcommand、flag
-x
--xxx=xxx
等。
- 命令行界面,可以客製化執行時的文字輸入選項,如 subcommand、flag
- Randomization
rand
- 隨機數字產生器 (Random Number Generator, RNG)。
- Iterator Parallelization
rayon
- 迭代器平行化,支援唯讀函式在其他執行緒執行,包含客製化任務。
- N-dimensional Array
ndarray
- 多維度陣列,比巢狀陣列更高效,包含向量和矩陣操作。
- 支援 rayon 的平行處理。
- 儲存成 NumPy 格式
ndarray-npy
。 - 線性代數
ndarray-linalg
。
- 2D Matrix
nalgebra
- 2D 矩陣操作,支援靜態大小。
- 幾何操作、線性代數。
- 可補強 ndarray 計算不足的部分。
- Serialization & De-serialization
serde
- 序列化/反序列化,可以用 derive macro 定義類型,並且轉成任何檔案格式或其他資料結構。
- Plot
plotters
- 圖表繪製,支援靜態動態渲染,並能儲存成點陣、向量等多種格式。
- Graphical User Interface (GUI)
egui
- 圖形化使用者介面,採用 immediate mode API(定義幀數,而非定義事件)。
- 支援 WebAssembly (WASM) 在網頁上渲染。
- 純 Rust,不依賴 C++ 程式庫(Linux 上需要 XCB)。