Skip to content

Instantly share code, notes, and snippets.

@KmolYuan
Last active December 25, 2022 14:31
Show Gist options
  • Save KmolYuan/6dd39688919b4e599c221af5d279536d to your computer and use it in GitHub Desktop.
Save KmolYuan/6dd39688919b4e599c221af5d279536d to your computer and use it in GitHub Desktop.
Rust Learning Roadmap.

Rust Learning Roadmap

從 0 開始介紹 Rust。

第 0 章 - 程式語言?

分類 行為 特點 舉例
編譯 (Compile) 翻譯(機器碼) 極速,利於靜態分析,安全性 C/C++, Rust, Fortran, Go, Haskell, ...
直譯 (Interpret) 邊跑邊看 啟動快,較依賴執行時錯誤 CPython, shell, MATLAB, 大部份高階語言
Just-in-Time (JIT) 邊跑邊翻譯 提升重複直譯的效能 JavaScript, Java, C#, PyPy, ...
  1. 控制流程 (Control Flow)
    1. 解包 (Unpacking) / 模式語法 (Pattern Syntax) let
    2. 取代 return 語句 - 表達式 (Expression)
      1. if-else else if
      2. match
      3. if let
      4. loop 'a: loop break 'a continue 'a
    3. 非表達式
      1. while while let
      2. for in(詳見迭代器)
  2. 顯式轉型 (Explicit Type Transform)
    1. 二進位轉型 as
    2. 泛型轉型 From TryFrom / Into TryInto(稍後補充)
  3. 顯式複製 (Explicit Copy) Clone / 隱式複製 (Implicit Copy) Copy
  4. 物件導向 (Object Orientation)
    1. 函式 (Function) fn
    2. 類型 (Type)
      1. 主要類型 (Primitive Types) (類型對應表)
      2. 元組 (Tuple) (T, U, V)
      3. 陣列 (Array) [T; N]
      4. 單元 (Unit) ()
      5. 結構體 (Structure) struct
      6. 枚舉 (Enumeration) enum
      7. 聯集 (Union) union
    3. 類型別名 (Type Alias) type T = U;
    4. 泛型邊界 (Generic Bounds)
      1. 特徵 (Trait) trait
      2. 生命週期 (Lifetime) 'a 'static
      3. 常量變數 (Constant Variable) const
  5. 專案 (Project) crate
    1. 模組 (Module) mod
    2. 可見性 (Visibility) pub
    3. 導入 (Import) use
  6. 安全性 (Safety)
    1. 記憶體安全性 (Memory Safety)
    2. 類型安全性 (Type Safety)
    3. 執行緒安全性 (Thread Safety)
  7. 借用檢查 (Borrow Check)
    1. 生指標 (Raw Pointer) *const T *mut T
    2. 參照 (Reference) &T &mut T
    3. 智慧指標 (Smart Pointer) Box<T>
    4. 胖指標 (Fat Pointer) &dyn T Box<dyn T>
    5. 內部可變 (Interior Mutability) Cell RefCell Atomic Mutex RwLock
    6. 參照計數器 (Reference Counter) Rc Arc
    7. 靜態變數 (Static Variable) static
    8. Copy-On-Write Cow / Unsized !Sized / 指標轉型 (教學)
  8. 取代 if-else 語句
    1. Option 類型 - 「無 (None)」選項
    2. Result 類型 - 「錯誤 (Error)」選項
  9. 取代 for 迴圈
    1. 容器 (Collections)
    2. 動態陣列參照 (Slice) &[T] &mut [T]
    3. 字串 (String)
      1. ASCII u8 &[u8] Vec<u8>
      2. UTF-8 char &str String
    4. 迭代器 (Iterator) Iterator FromIterator IntoIterator
  10. 摺疊程式碼
    1. 內嵌函式 (Inline Function) #[inline] fn
    2. 常數函式 (Constant Function) const fn
    3. 閉包 (Closure) (詳細教材)
    4. 巨集 (Macro)
      1. Function-like macro xxx!() xxx![] xxx! {}
      2. Attribute macro #[xxx] #![xxx]

應用程式庫

  1. Command-Line Interface (CLI) clap
    • 命令行界面,可以客製化執行時的文字輸入選項,如 subcommand、flag -x --xxx=xxx 等。
  2. Randomization rand
    • 隨機數字產生器 (Random Number Generator, RNG)。
  3. Iterator Parallelization rayon
    • 迭代器平行化,支援唯讀函式在其他執行緒執行,包含客製化任務。
  4. N-dimensional Array ndarray
    • 多維度陣列,比巢狀陣列更高效,包含向量和矩陣操作。
    • 支援 rayon 的平行處理。
    • 儲存成 NumPy 格式 ndarray-npy
    • 線性代數 ndarray-linalg
  5. 2D Matrix nalgebra
    • 2D 矩陣操作,支援靜態大小。
    • 幾何操作、線性代數。
    • 可補強 ndarray 計算不足的部分。
  6. Serialization & De-serialization serde
    • 序列化/反序列化,可以用 derive macro 定義類型,並且轉成任何檔案格式或其他資料結構。
  7. Plot plotters
    • 圖表繪製,支援靜態動態渲染,並能儲存成點陣、向量等多種格式。
  8. Graphical User Interface (GUI) egui
    • 圖形化使用者介面,採用 immediate mode API(定義幀數,而非定義事件)。
    • 支援 WebAssembly (WASM) 在網頁上渲染。
    • 純 Rust,不依賴 C++ 程式庫(Linux 上需要 XCB)。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment