bijou64:每個整數唯一一種表示,解碼速度比 LEB128 快 10 倍
Ink & Switch · 2026-05-29
Ink & Switch 為 Subduction CRDT 同步協定開發了 bijou64——一個新的可變長度整數(varint)編碼,核心保證是「每個數值恰好有一種合法位元組序列」。這消除了 LEB128 等方案的正則化漏洞(canonicalization attack),同時在均勻 u64 分佈的解碼速度達 ~0.75 ns/值,比 LEB128 的 ~7.3 ns 快約 10 倍。已發布至 crates.io(MIT/Apache-2.0)。
LEB128 的安全問題
LEB128 允許前置零位元組:0x00、0x80 0x00、0x80 0x80 0x00 都表示整數 0。在需要對編碼資料做數位簽名的協定中,攻擊者可以在不改變語義的前提下改變位元組序列,使簽名驗證失效。bijou64 設計原則是不允許這種模糊性存在,無需執行期驗證。
規格細節
第一個位元組決定後續長度與解碼路徑:
- 0–247:直接表示同值整數(1 位元組,涵蓋最常用的小整數)
- 248:後跟 1 個額外位元組,表示 248–503 範圍的值
- 249–255:後跟 2–8 個位元組,每個 tag 對應固定偏移量
大端序(big-endian)連續載荷配合 CPU byte-swap 指令,讓解碼為單一 load + swap + 偏移減法,分支預測穩定。正則性是數學上的,不是驗證邏輯——不需要 if-guard 確認編碼是否合法。
效能比較
| 場景 | bijou64 | LEB128 |
|---|---|---|
| 均勻 u64 解碼 | ~0.75 ns/值 | ~7.3 ns/值 |
| 正則化驗證 | 內建(免費) | 需額外開銷 |
| 248–65535 範圍編碼 | 略慢(LEB128 1.24×) | 較快 |
| 整體空間 | 差距 <2% | 基準 |
Roto 一週年:嵌入 Rust 的靜態型別 JIT 腳本語言
NLnet Labs · 2026-05-29
NLnet Labs 為網路路由引擎 Rotonda 開發的嵌入式腳本語言 Roto 發布一週年回顧。Roto 的設計目標是讓 Rust 應用程式在不重新編譯的前提下,接受使用者提供的過濾邏輯——靜態型別、JIT 編譯、語法貼近 Rust,並透過 library! 宏與宿主程序緊密整合。
架構:library! 宏整合
Rust 端使用 library! 宏宣告可供腳本呼叫的型別、函數和常數;Roto 腳本直接使用這些接口,型別在腳本編譯期即驗證:
// Rust
library! {
fn check_path(route: Route) -> bool;
struct Route { prefix: Prefix, as_path: AsPath }
}
// Roto 腳本
fn check_path(route: Route) -> bool {
route.as_path.len() < 5
}型別錯誤在腳本載入時報出,不會到執行期才失敗——這是相較於 Lua 等動態腳本語言的核心優勢。
一年新增功能
while與for迴圈、複合賦值運算子(+=)- f-string 格式化字串
enum型別、泛型參數- 全域
const綁定、List型別
外部採用與效能
Iocaine(可腳本化 Web 伺服器防禦代理)採用 Roto 後,實測效能優於 Lua 和 Fennel 替代方案。一年共釋出 6 個版本、2 場研討會演講,完成完整使用手冊撰寫,程式庫已遷移至 Codeberg。
Lunacy:以 Lazy Basic Block Versioning 在 Rust 中實作 Lua 5.1 JIT
redvice.org · 2026-05-29
作者以 Rust 從頭實作 Lua 5.1 直譯器 Lunacy,並使用 Lazy Basic Block Versioning(LBBV)技術達到 JIT 編譯。nbody benchmark 上接近 PUC Lua 5.1 速度,相較於純直譯模式有約 2.75 倍加速。
Lazy Basic Block Versioning 原理
傳統 JIT 在型別不確定時插入保守 guard,LBBV 採用不同策略:遇到型別不確定的操作時,暫停(suspend)成一個 thunk,等執行期取得實際型別後再繼續特化。Lunacy 將 bytecode 操作實作為 Rust coroutine,型別 guard 以閉包捕捉未知狀態,熱區達到閾值後觸發 JIT,使用 DynASM-rs 生成原生機器碼。
效能與限制
| Benchmark | 結果 | vs 純直譯 |
|---|---|---|
| nbody | ≈ PUC Lua 5.1 | ~2.75× 加速 |
| life | 明顯較慢 | ~2.75× 加速 |
主要瓶頸:Rust enum 表示不支援 NaN boxing(缺少指標標記),LBBV 本身帶來約 20% 運行開銷,hash slot 特化產生大量 thunk 導致間接跳躍增加。作者明確表示這是研究平台而非生產 Lua 替代品。
原始來源:redvice.org — Lunacy