Rust 宣布发布1.88.0

原文链接

宣布发布 Rust 1.88.0 2025 年 6 月 26 日 · Rust 发布团队

Rust 团队高兴地宣布 Rust 1.88.0 正式发布!Rust 是一门致力于让每个人都能构建可靠且高效软件的编程语言。

如何升级至 1.88.0 如已通过 rustup 安装 Rust,执行

bash 复制代码
$ rustup update stable

尚未安装?请访问官网获取 rustup,并查看1.88.0 详细发行说明。 欢迎切换到 beta / nightly 通道帮助测试未来版本,并在 GitHub issue 反馈问题。 版本亮点与深入解读

1. Let 链(let chains)

官方简介 允许在 if / while 条件中用 && 串联多个 let 语句,并可与普通布尔表达式混用,仅限 Rust 2024 版。

1.1 为什么需要

在条件判断里既要"模式匹配并绑定变量"又要追加布尔判断,过去必须写成层层嵌套 if let + if,如下所示:

rust 复制代码
if let Some(v) = maybe() {
    if let Ok(n) = v.parse::<u32>() {
        if n > 10 && n < 20 {
            // ...
        }
    }
}

层级深、阅读成本高。

1.2 新写法带来的改变

rust 复制代码
if let Some(v) = maybe()
   && let Ok(n)  = v.parse::<u32>()
   && (10..20).contains(&n)
{
    // 这里可以直接使用 n
}
  • 统一语法:if / if let 以及 while / while let 的差别被抹平。
  • 作用域连贯:前面 let 绑定的变量可在后续链条和代码块中使用。
  • 短路规则:与普通 && 一致,一旦某子表达式为 false,后续不再求值。

1.3 使用须知

仅在 Rust 2024 版可用,因其依赖 if-let 临时作用域 行为调整以确保析构顺序一致。 let 子表达式返回 bool:匹配成功 → true,否则 false。 模式既可反驳也可不反驳。

2. 裸函数(naked functions)

官方简介 在函数上标记 #[unsafe(naked)] 即可禁止编译器生成任何栈帧前/后序,函数体只能包含一次 naked_asm! 调用。

2.1 适用场景

启动与引导(bootloader、内核入口)。 上下文/中断切换,需极小开销手动保存/恢复寄存器。 超底层优化(如 compiler-builtins 中的关键算子)。

2.2 与现有方案对比

特性 裸函数 #[unsafe(naked)] global_asm! 普通 asm! 是否单独成函数 ✅ ❌ 嵌入现有函数 自动前后序 无 无 有 内可写 Rust 代码 只能 asm 只能 asm asm 与 Rust 混用 调用方式 像普通函数一样调用 需声明外部符号 普通函数

2.3 示例

rust 复制代码
#[unsafe(naked)]
pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 {
    // 相当于 a.wrapping_add(b)
    core::arch::naked_asm!(
        "lea rax, [rdi + rsi]",
        "ret",
    );
}

编译器 不会帮你保存寄存器或调整栈;必须自行遵守目标 ABI。 故需显式 unsafe,并谨慎审查安全性与可移植性。

3. 布尔配置(Boolean configuration)

cfg(true) / cfg(false) 让无条件启用/禁用配置更直观,替代过去隐晦的 cfg(all()) / cfg(any())。详细背景见 RFC 3695。

4. Cargo 自动缓存清理

Cargo 现会自动 GC $CARGO_HOME 缓存:

  • 网络下载的 .crate:3 个月未访问即删除
  • 本地缓存:1 个月未访问即删除
  • 如需永久保留依赖,可在 ~/.cargo/config.toml 添加:
toml 复制代码
[cache]
auto-clean-frequency = "never"

设计详情与未稳定子命令参见 cargo#13060。

新增稳定 API(节选)

  • Cell::update
  • HashMap::extract_if / HashSet::extract_if
  • proc_macro::Span::{line,column,start,end,file,local_file}
  • <[T]>::{as_chunks, as_rchunks, ...}
  • ......(完整列表详见发行说明)

新增 const 上下文稳定 NonNull::replace、Cell::{get, replace, ...} 等现可在 const fn 中使用。

其他重要变更 i686-pc-windows-gnu 目标降至 Tier 2(见公告),依旧由 rustup 分发,但测试减少,未来可能积累更多 Bug。 查看 Rust、Cargo、Clippy 的完整改动。 1.88.0 贡献者名单 众多开发者共同促成了 Rust 1.88.0 的发布,感谢所有人为此付出的时间与心血!❤️

获取帮助

升级工具链,体验新特性,祝编码愉快!

相关推荐
明天好,会的4 小时前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
寻月隐君8 小时前
Rust 网络编程实战:用 Tokio 手写一个迷你 TCP 反向代理 (minginx)
后端·rust·github
芳草萋萋鹦鹉洲哦16 小时前
【vue3+tauri+rust】如何实现下载文件mac+windows
windows·macos·rust
寻月隐君1 天前
Rust 异步编程实践:从 Tokio 基础到阻塞任务处理模式
后端·rust·github
萧曵 丶1 天前
Rust 中的返回类型
开发语言·后端·rust
浪裡遊1 天前
Sass详解:功能特性、常用方法与最佳实践
开发语言·前端·javascript·css·vue.js·rust·sass
受之以蒙1 天前
Rust & WASM 之 wasm-bindgen 基础:让 Rust 与 JavaScript 无缝对话
前端·笔记·rust
Elixin1 天前
第一章:环境搭建
rust
寻月隐君2 天前
告别 Vec!掌握 Rust bytes 库,解锁零拷贝的真正威力
后端·rust·github