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 操作手册。

官方博客1.98.0 vtableIssue 161441

公开条目写了什么

1.98.1
点版本
9/3
博客日期
161441
公开 issue
条目公开写法边界
缺陷vtable 里本该是函数指针的位置写成空指针只发生在部分情况
后果发出的代码有未定义行为有时只是加载空指针后段错误
升级rustup update stable官方一句话,不是教程
定位RELEASES.md 指向 rust-lang/rust#161441不是语言新特性版本

怎么读这次发布

  1. 1

    这是 1.98.0 的补丁

    官方把误编译写在唯一的功能段。不要当成 1.98.0 的特性重发,也不要当成包管理器换语言。

  2. 2

    空指针写在函数指针该在的位置

    博客原句:in some circumstances, rustc would incorrectly generate a trait object vtable with a null pointer where a function pointer should be。

  3. 3

    未定义行为不只是段错误

    官方写:有时“只是”加载空指针后 segfault,但也可以成为任意效果的借口,这是 UB 的典型写法。

  4. 4

    公开工单有复现边界

    issue 161441 标题写:rustc emits a vacant vtable slot for a callable boxed async service。报告写同一份 Rama 源在 1.97.1 能跑、在 1.98.0 崩溃。

同页和工单还点了什么

01

崩溃迹象写在 issue 里

公开报告写 macOS 报 SIGSEGV 且 pc=0。生成的调用方从 vtable + 0x18 取 Service 方法,然后跳到零值。

02

1.98.0 的日期不在这篇补丁页

rust-lang/rust 的 RELEASES.md 把 1.98.0 标成 2026-08-20,把 1.98.1 标成 2026-09-03。补丁页本身不重讲 1.98.0 的语言条目。

03

官方还请人测 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 操作手册。

创建房间