网易首页 > 网易号 > 正文 申请入驻

rust 1.96.0 更新:语言、编译器、Cargo、Rustdoc、兼容性全面升级,必看完整解读

0
分享至




Rust 1.96.0 于 2026 年 5 月 29 日正式发布,这次版本更新覆盖语言特性、编译器支持、标准库能力、Cargo 构建行为、Rustdoc 展示方式以及一批重要兼容性调整与内部改进。对使用 Rust 的开发者来说,这不仅是一次常规升级,更是一份值得仔细阅读的版本变更清单,因为其中既有可直接使用的新能力,也有可能影响现有项目的兼容性变化。

一、Rust 1.96.0 发布概览

Rust 1.96.0 的发布时间是 2026 年 5 月 29 日,版本号为 1.96.0。本次更新内容分布非常广,覆盖了以下几个大方向:

  • • Language

  • • Compiler

  • • Libraries

  • • Stabilized APIs

  • • Cargo

  • • Rustdoc

  • • Compatibility Notes

  • • Internal Changes

可以看到,这次更新并不是单点增强,而是对语言表达能力、平台支持、库能力和工具链行为的整体提升。同时,其中还包含若干兼容性注意事项,说明升级时需要结合项目情况进行检查。

二、Language:语言层面的改进

本次 Rust 1.96.0 在语言层面带来了 5 项更新。

1. 允许将 expr metavariable 传递给 cfg

这项改进允许把 expr metavariable 传给 cfg。对于宏和条件编译相关场景来说,这意味着表达式层面的元变量在 cfg 使用上更灵活,能够支持更多宏展开和条件判断场景。

2. 在 tuple expressions 中始终自动强制转换 never 类型

这项变化解决了 tuple expressions 中 never 类型推导和转换上的问题。现在,never 类型会在 tuple expressions 中始终被自动 coercion,从而减少一些边界场景下的类型推导困扰。

3. 避免在罕见情况下对函数参数给出错误的推导指导

这项修复针对的是少见场景中的类型推导提示错误。官方说明是避免在罕见情况下对函数参数给出不正确的 inference guidance。虽然属于比较细节的改进,但它直接影响编译器在某些复杂代码中的诊断和推导体验。

4. inline assembly 支持 s390x 向量寄存器

Rust 1.96.0 现在支持在 inline assembly 中使用 s390x vector registers。这增强了底层编程和平台相关开发的能力,尤其对需要编写汇编的高性能或系统级场景很重要。

5. 允许将 ManuallyDrop 类型的常量用作模式匹配

现在可以把 type 为 ManuallyDrop 的常量作为 pattern 使用,这修复了 1.94.0 中引入的一个回归。对依赖常量模式匹配的代码来说,这是一个恢复正确行为的重要修复。

三、Compiler:编译器更新

Rust 1.96.0 在编译器层面也有两项明确更新。

1. 为 LoongArch Linux targets 启用 link relaxation feature

编译器现在会为 LoongArch Linux targets 启用 link relaxation feature。这属于目标平台相关的底层增强,影响链接过程和生成结果。

2. 更新 riscv64gc-unknown-fuchsia baseline

riscv64gc-unknown-fuchsia 的 baseline 已更新为 RVA22 + vector。这个变化意味着该目标的基线能力得到提升,并与新的指令集/向量能力保持一致。

四、Libraries:标准库与库层面的变化

Libraries 部分是本次更新非常重要的一块,共包含 3 项内容。

1. 支持遍历 NonZero 整数范围

Rust 1.96.0 现在支持迭代 NonZero integers 的 ranges。也就是说,NonZero 类型不再只是用于表达非零约束,它在范围迭代中也具备了直接支持,这会让相关代码更自然。

2. 调整 “valid for read/write” 的定义

官方对 “valid for read/write” 的定义进行了重构:现在把 null 排除在该定义之外,并将 null 作为个别方法中的异常处理。这个变化属于语义层面的整理,目的是让定义更清晰、更一致。

3. 修复 SGX delayed host lookup via ToSocketAddr

Rust 1.96.0 修复了 SGX 场景下通过 ToSocketAddr 进行 delayed host lookup 的问题。对于涉及 SGX 的网络解析或地址转换逻辑,这是一个明确的修复项。

五、Stabilized APIs:稳定化 API

本次 Rust 1.96.0 稳定了多个 API,覆盖宏、类型转换以及 range 相关类型。

1. assert_matches! 2. debug_assert_matches!

这两个宏已经稳定。它们用于更方便地做模式匹配式断言,能够提升测试和调试代码的可读性。

3. From for AssertUnwindSafe

现在 AssertUnwindSafe 支持 From 。这意味着可以更方便地从 T 转换为 AssertUnwindSafe 。

4. From for LazyCell

LazyCell 现在也支持 From 。

5. From for LazyLock

LazyLock 同样支持 From 。

6. core::range::RangeToInclusive 7. core::range::RangeToInclusiveIter 8. core::range::RangeFrom 9. core::range::RangeFromIter 10. core::range::Range 11. core::range::RangeIter

这些 range 相关类型与迭代器接口已经稳定。对范围表达、迭代逻辑和相关泛型代码而言,这意味着核心 range 设施进一步正式可用。

六、Cargo:构建工具更新

Cargo 在 Rust 1.96.0 中有 3 项重要变化,其中还有安全修复。

1. 允许依赖同时指定 git 仓库和备用 registry

现在一个依赖可以同时指定 git repository 和 alternate registry。官方说明是:与 crates.io 类似,local 构建时会使用 git repository,而发布时会使用 registry 版本。

这项能力对依赖管理场景非常有用,尤其是既要本地跟随 git,又要发布时走 registry 的项目。

2. 配置中支持 target.'cfg(..)'.rustdocflags

Cargo 配置现在新增了 target.'cfg(..)'.rustdocflags 支持。这个变化让 rustdocflags 的配置更灵活,可以按 cfg 条件进行设置。

3. 修复 CVE-2026-5222 和 CVE-2026-5223

Cargo 本次还修复了两个安全问题:CVE-2026-5222 和 CVE-2026-5223。对于生产环境和供应链安全来说,这是升级 Rust 1.96.0 的重要理由之一。

七、Rustdoc:文档工具更新

Rustdoc 在 1.96.0 中有 3 项变化,重点在文档渲染和侧边栏展示。

1. 弃用说明现在像普通文档一样渲染

Rustdoc 对 deprecation notes 的渲染方式进行了调整。以前它们使用 css white-space: pre-wrap; 并且会去掉渲染 HTML 中的

元素,这会带来一些问题和不直观的行为。

现在的行为更可预测。但官方也特别说明:一些多行 deprecation notes 可能会以单行方式渲染。如果这不是你想要的效果,可以使用标准 markdown 的换行方式,也就是两个空格加一个换行 "\n"。

2. 不再在 impl items 上发出 missing_doc_code_examples lint

Rustdoc 现在不会在 impl items 上触发 missing_doc_code_examples lint。这有助于减少不必要的文档 lint 干扰。

3. 侧边栏中分离 methods 和 associated functions

Rustdoc 现在在侧边栏中将 methods 和 associated functions 分开显示。这个调整提升了文档浏览的结构清晰度。

八、Compatibility Notes:兼容性注意事项

这部分是升级 Rust 1.96.0 时必须重点查看的内容,因为它们可能影响已有项目编译或行为。

1. 修复 #[repr(Int)] enums 在某些特殊场景下的布局

在某些涉及 uninhabited zero-sized types 字段的边界情况下,#[repr(Int)] enums 的 layout 已修复。说明这属于布局层面的兼容性修正。

2. 禁止 unsize-coercing 到 Pin ,当 Foo 不实现 Deref 时

以前某些场景下可能允许 unsize coercion into Pin ,即使 Foo 没有实现 Deref。现在这种 coercion 被禁止,因为它会产生一个没有有用 public API 的类型。

3. rustc 在 wasm targets 上停止传递 --allow-undefined

rustc 现在不再在 wasm targets 上传递 --allow-undefined。这是一个行为变化,可能影响相关目标的链接过程。

4. gate accidentally stabilized #![reexport_test_harness_main] attribute

原本意外稳定的 #![reexport_test_harness_main] attribute 现在被 gate 起来了。也就是说,这个属性不再维持意外稳定状态。

5. 返回位置 impl trait in traits 类型过于私有时会报错

对于 return-position-impl-trait-in-traits,如果其 types are too private,Rust 1.96.0 现在会报错。这是一个可见的编译行为变化。

6. 在依赖中报告 uninhabited_static lint,并设为 deny-by-default

uninhabited_static lint 现在会在 dependencies 中报告,并且成为 deny-by-default。该变化会影响依赖代码的编译结果。

7. 分布式构建中的 windows-gnu 现在包含 non-split debuginfo

Distributed builds 现在对 windows-gnu 提供 non-split debuginfo。官方说明这会提升 backtraces 的质量,但不会影响 rustc/cargo 在这些目标上的默认输出行为。

8. 检查 const generic arguments 在更多位置是否正确 typing

Rust 1.96.0 现在会在更多位置检查 const generic arguments 是否 correctly typed。这会让 const 泛型相关错误更早暴露。

9. 移除 -Csoft-float

本版本移除了 -Csoft-float。这是明确的兼容性变化,使用相关参数的项目需要注意。

10. 不再允许导入 struct 时使用 ::{self [as name]}

例如struct S {}; use S::{self as Other};这样的写法现在不再被允许,因为{self}imports 需要 module parent。这是一个语法/导入规则变化。

11. export_name、link_name、link_section 若重复出现,第一次的属性优先

对于 export_name、link_name 和 link_section 属性,如果同一属性出现多次,现在由第一个属性生效。这个优先级变化会影响属性重复场景下的链接行为。

12. 更新最低外部 LLVM 到 21

Rust 1.96.0 将 minimum external LLVM 更新到 21。这意味着外部 LLVM 版本要求提升,相关构建环境需要匹配。

13. avr targets 上 c_double 改为 f32

在 avr targets 上,由于 C 的 double 类型默认是 32-bit,所以现在将 c_double 改为 f32,以匹配 C 的 double。官方也明确说明这是一个 breaking change,但这是必要的修正。

九、Internal Changes:内部变更

最后是内部变化,这些变更不影响任何 public interfaces,但对 rustc 和相关工具的性能或内部机制有重要改进。

1. JSON targets:aarch64 softfloat targets 需要 rustc_abi 为 softfloat

对于 JSON targets,aarch64 softfloat targets 现在必须将 rustc_abi 设置为 "softfloat"。这是 target 配置层面的更严格要求。

2. target specs:对 LLVM ABI values 更严格检查,并与 cfg(target_abi) 关联

target specs 现在会对 LLVM ABI values 做更严格的检查,同时把这一点与 cfg(target_abi) 关联起来。这项改进有助于让目标规格更加一致和可靠。

十、这次版本更新的整体看点

综合来看,Rust 1.96.0 的核心看点有以下几个:

  1. 1. 语言层面更灵活
    expr metavariable 可传给 cfg,tuple expressions 中 never 类型自动 coercion,宏和类型推导体验更好。

  2. 2. 底层平台支持继续增强
    s390x inline assembly、LoongArch Linux link relaxation、riscv64gc-unknown-fuchsia baseline 更新,说明 Rust 在更多架构上持续完善。

  3. 3. 标准库和核心 range 能力更成熟
    NonZero 范围迭代、多个 range 类型稳定化,意味着常用基础能力进一步正式落地。

  4. 4. Cargo 更适合复杂依赖场景
    git 与 registry 组合依赖、cfg 条件 rustdocflags、以及安全修复,都值得升级。

  5. 5. 文档工具更可控
    rustdoc 对弃用说明的渲染调整、侧边栏结构优化,提升了文档体验。

  6. 6. 兼容性变化必须重视
    本次包含多个 breaking 或行为变化,尤其是 wasm、avr、Pin coercion、重复属性优先级、LLVM 最低版本等,都需要实际项目检查。

十一、升级建议

如果你正在维护 Rust 项目,升级到 1.96.0 前建议重点检查以下内容是否受影响:

  • • 是否使用了 wasm 目标相关链接行为

  • • 是否依赖 -Csoft-float

  • • 是否使用 avr targets

  • • 是否存在重复的 export_name / link_name / link_section 属性

  • • 是否依赖以前允许但现在禁止的 struct 导入写法

  • • 是否涉及 Pin 的 unsize coercion

  • • 是否使用 return-position-impl-trait-in-traits 且类型可见性较复杂

  • • 是否有依赖 uninhabited_static 相关 lint

  • • 是否涉及 external LLVM 版本环境

  • • 是否使用 JSON targets 配置 aarch64 softfloat

  • • 是否使用 rustdoc 的弃用说明多行显示

如果上述场景命中,建议先在测试环境验证,再切换到正式版本。

十二、结语

代码地址:github.com/rust-lang/rust

Rust 1.96.0 是一次覆盖面很广的版本更新,既包含语言和库的能力增强,也包含 Cargo、安全修复、Rustdoc 体验优化以及多项兼容性调整。对于开发者来说,这次升级的价值非常明确:可用能力更多、平台支持更广、工具链行为更清晰,但同时也需要认真关注 breaking changes 和目标平台的特殊调整。

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“查不出问题就是最大的问题”?畸形自查正在拖垮基层

“查不出问题就是最大的问题”?畸形自查正在拖垮基层

职场资深秘书
2026-08-10 18:42:10
美联储,大消息!金价又涨了!反转信号出现?

美联储,大消息!金价又涨了!反转信号出现?

金融界
2026-08-11 12:04:32
同济大学全体关切公平的教师致杨金龙校长公开信

同济大学全体关切公平的教师致杨金龙校长公开信

紫京讲谈
2026-08-10 16:49:29
鸿蒙智行各车型7月细分销量曝光,问界M9售出9639辆居榜首

鸿蒙智行各车型7月细分销量曝光,问界M9售出9639辆居榜首

IT之家
2026-08-11 23:32:12
不可思议!无锡一地下停车场突发积水倒灌:两人被激流冲走、70台车泡水

不可思议!无锡一地下停车场突发积水倒灌:两人被激流冲走、70台车泡水

火山詩话
2026-08-11 13:38:41
恩佐闹剧收场:1.2亿英镑标价,没人买单的尴尬切尔西又演了一出转会大戏

恩佐闹剧收场:1.2亿英镑标价,没人买单的尴尬切尔西又演了一出转会大戏

带你逛体坛
2026-08-11 17:38:07
全场消费由百花影后买单!高叶曝卫诗雅获奖后聚餐,原因令人意外

全场消费由百花影后买单!高叶曝卫诗雅获奖后聚餐,原因令人意外

星河不入我
2026-08-12 02:36:44
黄瓜再次成为关注对象!多名院士发现:常吃黄瓜的人,有7个变化

黄瓜再次成为关注对象!多名院士发现:常吃黄瓜的人,有7个变化

任医生聊健康
2026-08-03 08:40:30
深夜,歹徒闯入家中对她施暴近两个小时,她咬紧牙关一声不吭,只为保护楼上熟睡的女儿。当警察破门而入时,才发现这位母亲早已浑身是血

深夜,歹徒闯入家中对她施暴近两个小时,她咬紧牙关一声不吭,只为保护楼上熟睡的女儿。当警察破门而入时,才发现这位母亲早已浑身是血

人生录
2026-07-30 00:05:11
早新闻 | 000096 ,大幅上调业绩预期

早新闻 | 000096 ,大幅上调业绩预期

数据宝
2026-08-12 07:39:49
硬杠,伊朗换将了!

硬杠,伊朗换将了!

财经要参
2026-08-12 07:44:56
百花奖落幕,3人出尽风头,2人镀金失败,杨幂赢麻,1人败光体面

百花奖落幕,3人出尽风头,2人镀金失败,杨幂赢麻,1人败光体面

揽星河的笔记
2026-08-11 13:05:17
8月11日人社部财政部公布养老金调整通知了吗?

8月11日人社部财政部公布养老金调整通知了吗?

晨光苏醒a
2026-08-12 05:56:59
今日!CCTV5直播国乒林诗栋等出战,5+转中国女篮+斯诺克,网络转欧洲超级杯

今日!CCTV5直播国乒林诗栋等出战,5+转中国女篮+斯诺克,网络转欧洲超级杯

晚池
2026-08-12 00:23:06
演员贾冰,全网可怜!

演员贾冰,全网可怜!

新动察
2026-08-10 15:29:10
印度重启生产线追赶歼-16?印度要再造12架苏-30MKI,称国产化率超50%,可信吗?

印度重启生产线追赶歼-16?印度要再造12架苏-30MKI,称国产化率超50%,可信吗?

蓝星杂谈
2026-08-12 08:05:06
瑞典大满贯:"大翻车"现场!国乒战将遭血洗,周启豪再战松岛

瑞典大满贯:"大翻车"现场!国乒战将遭血洗,周启豪再战松岛

寒士之言本尊
2026-08-11 19:10:03
55岁广东主持人:从儿科医生到主持界,貌美如花仍在岗

55岁广东主持人:从儿科医生到主持界,貌美如花仍在岗

凛若秋霜
2026-08-12 02:29:54
小S晒与大S、S妈旅行旧照,字里行间全是思念,隔空喊话“很想你”

小S晒与大S、S妈旅行旧照,字里行间全是思念,隔空喊话“很想你”

老吴教育课堂
2026-08-12 05:04:45
26岁中锋弗拉霍维奇加盟土超;33岁博格巴将被解约,成为自由球员

26岁中锋弗拉霍维奇加盟土超;33岁博格巴将被解约,成为自由球员

福酱的小时光
2026-08-12 06:01:19
2026-08-12 08:47:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1388文章数 79关注度
往期回顾 全部

科技要闻

AI大战变天:扎克伯格突然回头

头条要闻

美军MH-60直升机向商船开火:发射两枚"地狱火"导弹

头条要闻

美军MH-60直升机向商船开火:发射两枚"地狱火"导弹

体育要闻

NBA老顽童,抽着大麻喝着小酒告别了

娱乐要闻

“雅典娜”确认被害 细节令人发指!

财经要闻

李嘉诚,再一次大撤退!他嗅到了什么?

汽车要闻

闪充/天神之眼B/云辇-C 2027款海豹06售9.99万元起

态度原创

艺术
时尚
数码
健康
本地

艺术要闻

色彩的盛宴,视觉的狂欢:西班牙水彩大师福斯蒂诺·马丁·冈萨雷斯的艺术世界

百花奖,不渡85花

数码要闻

石头G30S Ultra滚筒扫地机官宣:41000Pa巅峰吸力、75℃热活水拖

心血管专家破解猝死八大谣言

本地新闻

黄州一夜,苏轼写给普通人的月光

无障碍浏览 进入关怀版