Rust 1.100 发布:等了 10 年的 never 类型终于稳定,Cargo 还能给依赖设冷静期

Rust 1.100.0 发布

Rust 团队在 2026 年 11 月 12 日发布了 Rust 1.100.0,这是 Rust 的第 100 个稳定版。版本号看着整齐,内容也不含糊:等了 10 年的 never 类型终于稳定,分配器 API 落地,Cargo 还学会了给依赖设“冷静期”。已装 Rust 的用户一条命令就能升级:

$ rustup update stable

Never 类型:10 年、5 次失败,终于稳定

这次的头条是 never 类型 ! 稳定。写在代码里就是 !,表示“永远不会返回值的计算”,比如 return、break、std::process::exit 这类终结控制流的表达式,类型都是 !。因为不可能存在一个 never 类型的值,Rust 允许把它强制转换成任意类型——这正是它和别的空类型不一样的地方,比如 match 的一个分支直接 return,类型检查也能通过:

fn mrrrow(option: Option<u32>) {
    let value = match option {
        Some(x) => x,
        // `return` 的类型是 `!`,可被强制转为 `u32`
        None => return,
    };
}

这次发布后,never 类型可以在任何位置具名使用(以前 Result<_, !> 这种写法是不允许的),Infallible 也正式变成了 never 类型的别名,于是所有用过 Infallible 的旧 API 都能直接用 !。这项稳定化前后经历了 10 年和 5 次失败的尝试,也补完了 Rust 官方的这个项目目标。

注意一个破坏性变更:为了配合 Infallible 的改动,2024 之前版本(2015、2018、2021)的 never 类型回退从 () 改成了 !。官方说绝大多数代码无感,但少数场景可能受影响(比如忽略一个返回泛型参数的函数的结果),编译器也可能因此把更多代码判定为不可达。如果某个依赖因此报错,先升级依赖,修复可能已经发布了。

分配器 API:Vec、Box 能用自定义分配器了

1.100 稳定了 allocator_api 的核心部分,库作者可以定义自己的分配器,配合标准库类型使用,目前覆盖 Vec 和 Box,通过新稳定的 Allocator trait 实现。这是 Allocators 1.0 项目目标的基础,后续会扩展到更多集合与指针类型。

DropGuard:函数退出时顺手跑一段清理代码

新引入的 core::mem::DropGuard 帮你省掉样板:给它一个变量和一个闭包,变量被丢弃时闭包就会执行,无论函数是正常返回、? 提前返回还是 panic。还带 dismiss 方法,成功时取回变量、不执行清理,适合快速实现“要么全做、要么回滚”的事务式 API。

conjure_zst:终于有了官方的零大小类型构造方式

1.100 用一个函数回答了“怎么在 unsafe 里创建一个零大小类型”:std::mem::conjure_zst。以前要靠 transmute(())、MaybeUninit::uninit().assume_init() 各种偏方,现在有了专门的写法。这个函数本身是 unsafe 的——比如 PyO3 的 Python<'py> 标记就靠“构造不出来”来保证安全,凭空变一个出来会破坏前提。

Cargo:未用依赖会提醒,新版本能设冷静期

Cargo 这次有三处值得留意的改进:

  • 未用依赖提醒:构建时会报告不再使用的依赖(cargo::unused_dependencies 默认 warn),并提示删掉它;这是 Cargo 新 lint 系统的一部分;
  • 依赖冷静期(min-publish-age):恶意版本往往在发布后几小时到几天内就被发现,Cargo 现在可以等一等再采用新版本。在 .cargo/config.toml 里加一行:
[registry]
global-min-publish-age = "3 days"

之后 cargo update 会跳过 3 天内发布的新版本,并告诉你它按住了哪个版本。急需某个新版时,可以单次绕过:CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow cargo update <包名> --precise <版本>。官方也提醒,冷静期能降低部分供应链攻击风险,但不是完整的防御,依赖更新还是要照常 review;

  • 减少缓存冲突:构建目录现在始终按构建步骤组织并应用构建配置哈希,不同特性组合不再互相覆盖,对跨 git worktree 共享构建目录的场景尤其有用。

Rust 生态这两年越来越偏向“基础设施化”:前阵子 Discord 宣布弃用 Electron、全面改用 Rust 重写客户端,早期构建内存只有 290MB;今天刚在站内发过的 Relax 也是 Rust 写的实时编译器,大型 3D 游戏从源码到第一帧只要 11 秒。1.100 不是 Rust 2.0,没有大张旗鼓的新语法,改的是默认值和安全护栏,升级前值得先看一眼 Cargo 冷静期那三行配置。

转自 Rust 官方博客的文章《Announcing Rust 1.100.0》,原文链接

© 版权声明
THE END
喜欢就支持一下吧
点赞29 分享