Rust 1.98.1是什麼:2026年9月vtable誤編譯與空指標全解析
Rust 9月3日寫:1.98.1 補上 1.98.0 的 vtable 誤編譯。空指標寫在函式指標該在的位置。公開工單是 rust-lang/rust#161441。
2026 年 9 月 3 日,Rust Release Team 在官方部落格發布點版本 1.98.1。正文只寫一件事:修復 vtable 產生裡的誤編譯。官方升級寫法是 rustup update stable。
檢索詞就是這個點版本號。部落格寫:在 Rust 1.98.0 的部分情況下,rustc 會給 trait 物件 vtable 寫上空指標,本應是函式指標。這會讓發出的程式碼進入未定義行為。下文只核對這篇部落格和公開 issue 編號,不是 rustup 操作手冊。
公開條目寫了什麼
| 條目 | 公開寫法 | 邊界 |
|---|---|---|
| 缺陷 | vtable 裡本該是函式指標的位置寫成空指標 | 只發生在部分情況 |
| 後果 | 發出的程式碼有未定義行為 | 有時只是載入空指標後段錯誤 |
| 升級 | rustup update stable | 官方一句話,不是教學 |
| 定位 | RELEASES.md 指向 rust-lang/rust#161441 | 不是語言新特性版本 |
怎麼讀這次發布
- 1
這是 1.98.0 的補丁
官方把誤編譯寫在唯一的功能段。不要當成 1.98.0 的特性重發,也不要當成套件管理器換語言。
- 2
空指標寫在函式指標該在的位置
部落格原句:in some circumstances, rustc would incorrectly generate a trait object vtable with a null pointer where a function pointer should be。
- 3
未定義行為不只是段錯誤
官方寫:有時「只是」載入空指標後 segfault,但也可以成為任意效果的藉口,這是 UB 的典型寫法。
- 4
公開工單有重現邊界
issue 161441 標題寫:rustc emits a vacant vtable slot for a callable boxed async service。報告寫同一份 Rama 原始碼在 1.97.1 能跑、在 1.98.0 崩潰。
同頁和工單還點了什麼
崩潰跡象寫在 issue 裡
公開報告寫 macOS 報 SIGSEGV 且 pc=0。產生的呼叫方從 vtable + 0x18 取 Service 方法,然後跳到零值。
1.98.0 的日期不在這篇補丁頁
rust-lang/rust 的 RELEASES.md 把 1.98.0 標成 2026-08-20,把 1.98.1 標成 2026-09-03。補丁頁本身不重講 1.98.0 的語言條目。
官方還請人測 beta / nightly
部落格寫:若要幫忙測後續版本,可在本地和 CI 使用 rustup default beta 或 nightly,並回報缺陷。
邊界
官方沒有把 1.98.2 的日期寫進這篇。下一步是 blog.rust-lang.org/2026/09/03/Rust-1.98.1/。需要短會且不想再開一套帳號時,回 wbstorm 用房間號即可,另見 建立或加入房間 和 白板基礎。
# Sources
# blog.rust-lang.org/2026/09/03/Rust-1.98.1/
# github.com/rust-lang/rust/issues/161441
# 2026-09-03這是 1.98.0 的功能重發嗎?
不是。官方這篇只寫 vtable 誤編譯的點版本。1.98.0 在 RELEASES.md 標成 8 月 20 日。
一定會段錯誤嗎?
官方寫:有時「只是」載入空指標後 segfault,但未定義行為也可以成為任意效果的藉口。
這是產品使用教學嗎?
不是。本文只核對 9 月 3 日 Rust 部落格和公開 issue,不是 rustup 操作手冊。