後端工坊 2026 年 8 月 21 日

2026-08-21 — Rust 供應鏈攻擊、1.98.0 發布與 CppCon 效能工程齊聚後端動態

primary=https://cppcon2026.sched.com/event/2RT6C/in-pursuit-of-a-6000-fps-game-boy-emulator primary=https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/ primary=https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/

打造 6,000 FPS Game Boy 模擬器:CppCon 2026 效能工程議程

CppCon 2026 · 2026-08-20

講者 Tom Tesch(Howest DAE 講師)將於 CppCon 2026(9 月 16 日,美國 Aurora)發表議程《In Pursuit of a 6,000 FPS Game Boy Emulator》,目標是把一台 Game Boy 模擬器推到約 6,000 FPS 執行 Tetris,相當於原生硬體的百倍速度。

原本的問題

一般模擬器為求相容性,會把指令解碼、記憶體存取與各種卡帶類型都做成通用路徑,這種泛用設計在追求極限吞吐量時,容易被指令 dispatch 的分支預測失準與生成程式碼過大拖垮 cache 命中率兩個因素卡住。Tesch 的議程摘要把問題定義為「效能瓶頸何時不再是 C++ 語言的問題,而是 CPU 架構與編譯器的問題」。

採用的方法

他不追求相容多種卡帶,而是針對單一卡帶(Tetris)做特化,同時保留日後測試其他遊戲的彈性;摘要列出的技術面向涵蓋指令 dispatch 設計、記憶體存取模式、生成程式碼大小、cache 行為、分支預測與編譯期計算,並強調全程以量測驅動而非直覺調參。

實際效果

議程摘要目前只公開6,000 FPS 的目標與百倍加速的說法,實際測試數據、圖表與方法細節要等 9 月正式開講、投影片或影片釋出後才能驗證。

原始來源:CppCon 2026 議程頁


Rust 套件 arrayref 遭供應鏈攻擊,惡意版本上架 86 分鐘即下架

blog.rust-lang.org · 2026-08-20

2026 年 8 月 20 日,Rust Security Response Team 公告 arrayref crate 遭到供應鏈攻擊,攻擊者發布了惡意版本 arrayref@0.3.10,同時波及同一作者名下另外兩個套件。

漏洞機制

公告指出維護者的帳號或裝置疑似遭入侵,而非維護者本人涉入攻擊;惡意版本引入了對 proc-macro1 的依賴,而 proc-macro1 的 build script 會在編譯期下載並執行惡意 payload,並非把惡意邏輯直接寫進 crate 程式碼本身。這正是 Rust build.rscargo build 階段即可執行任意程式碼的既有風險再度被利用。

受影響版本

三個套件的惡意版本上線時間都很短,最短的 arrayref 只在線上待了 86 分鐘就被下架:

Crate版本上線時長
arrayref0.3.1086 分鐘
internment0.8.790 分鐘
append-only-vec0.1.9107 分鐘

另外 proc-macro1proc-macro-enaovinearonearonenaotinymember 這幾個套件則是所有版本被整組刪除,時間軸顯示惡意版 arrayref@0.3.1007:15:00Z 發布,08:41:40Z 即被撤下。

修補與緩解

Rust 官方沒有發出正式 CVE 編號,而是直接提供本地檢查指令,讓開發者確認快取裡是否曾經抓過惡意版本:

find ~/.cargo/registry/cache -type f \( \
  -name 'arrayref-0.3.10.crate' -o \
  -name 'internment-0.8.7.crate' -o \
  -name 'append-only-vec-0.1.9.crate' -o \
  -name 'proc-macro1-*.crate' \) -print

若比對到上述檔案,需檢查 Cargo.lock 是否鎖定過惡意版本號,並清除本地快取後重新解析依賴

原始來源:Rust Blog:Supply chain attack on arrayref


Rust 1.98.0 發布:新增 algebraic 浮點運算與免動態派發整數格式化

blog.rust-lang.org · 2026-08-20

Rust 團隊於 2026 年 8 月 20 日發布 1.98.0,這個版本把兩塊過去得靠外部 crate 才能做到的效能優化收進標準庫

核心改動

f32/f64 新增 algebraic_addalgebraic_subalgebraic_mulalgebraic_divalgebraic_rem 方法,允許編譯器依數學性質重排運算,效果類似其他語言的 -ffast-math;官方文件明確寫明這些方法結果不確定(non-deterministic),但不會產生未定義行為,把「可能算出不同結果」與「記憶體安全」兩件事分開處理。

所有基礎整數型別也新增 format_into 方法,搭配 NumBuffer<Self> 緩衝區可跳過 write! 的動態派發開銷,官方數據顯示效能與外部 crate itoa 相當

文件也把 ManuallyDrop<Box<_>> 在 drop 內部值後再移動的行為訂為穩定保證,補上 1.96.0 就已修正、但先前未寫進文件的語意保證

影響範圍

本次總計穩定 23 個 API,包含字串/切片的 substring range 方法、from_utf16le/from_utf16be 與其 lossy 版本、strip_circumfixNonZero::from_str_radix 等;長期手動加入 itoa 只為了避開格式化開銷的專案,format_into 可能是最直接能拿掉的一個依賴

原始來源:Rust Blog:Announcing Rust 1.98.0


End of article
0
Would love your thoughts, please comment.x
()
x