從 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-elseelse ifmatchif letloop'a: loopbreak 'acontinue 'a
- 非表達式
whilewhile letfor in(詳見迭代器)
- 解包 (Unpacking) / 模式語法 (Pattern Syntax)
- 顯式轉型 (Explicit Type Transform)
- 二進位轉型
as - 泛型轉型
FromTryFrom/IntoTryInto(稍後補充)
- 二進位轉型
- 顯式複製 (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 TBox<dyn T> - 內部可變 (Interior Mutability)
CellRefCellAtomicMutexRwLock - 參照計數器 (Reference Counter)
RcArc - 靜態變數 (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&strString
- ASCII
- 迭代器 (Iterator)
IteratorFromIteratorIntoIterator
- 摺疊程式碼
- 內嵌函式 (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)。