rust 1.95.0 最新版发布:语言特性、编译器、平台支持、标准库、Rustdoc 与兼容性变更全解析

网易专栏5天前发布 nxnqh
16 0 0

🤖 AI总结

主题

Rust编程语言1.95.0版本发布,涵盖语言特性、编译器、标准库等多方面更新。

摘要

Rust 1.95.0是一次全面的重要版本更新,在语言特性、编译器、标准库、平台支持和工具链方面均有显著改进和扩展。

关键信息

  • 1 稳定了match分支上的if let guards等语言特性。
  • 2 扩展了标准库API,包括原子类型、集合操作等。
  • 3 提升了平台支持范围并优化了Rustdoc文档工具。

rust 1.95.0 最新版发布:语言特性、编译器、平台支持、标准库、Rustdoc 与兼容性变更全解析

rust 1.95.0 最新版发布:语言特性、编译器、平台支持、标准库、Rustdoc 与兼容性变更全解析

rust 1.95.0 最新版发布:语言特性、编译器、平台支持、标准库、Rustdoc 与兼容性变更全解析

rust 1.95.0 最新版发布:语言特性、编译器、平台支持、标准库、Rustdoc 与兼容性变更全解析

2026年4月16日,Rust 1.95.0 正式发布。作为一次重要版本更新,这一版在语言层、编译器、平台支持、标准库、Rustdoc 以及兼容性方面都带来了相当丰富的调整。

一、Rust 1.95.0 发布概览

Rust 1.95.0 的更新可以概括为几个关键词:

• 语言特性继续完善

  • • 标准库稳定 API 持续扩展

  • • 编译器能力增强

  • • 平台支持范围扩大

  • • Rustdoc 体验优化

  • • 一些兼容性细节发生变化,需要升级时重点关注

    这次版本并不是单纯增加几个 API,而是在多个核心方向上同步推进:
    一方面继续稳定一些常用语言能力;另一方面也在修复 const-eval、模式匹配、导入规则、ABI 处理等底层行为,使 Rust 在更大规模工程里的表现更稳定、更一致。

    二、Language:语言层更新重点

    Rust 1.95.0 在语言特性方面的变化非常值得关注,尤其是一些和模式匹配、const 语义、导入规则相关的内容。

    1. 稳定 match 分支上的 if let guards

    本次版本中,if let guards on match arms被稳定。
    这意味着在match的分支条件中,可以使用更灵活的if let守卫表达能力,增强模式匹配的可读性和表达力。

    对于经常处理复杂枚举分支的代码来说,这个能力非常实用。它让match的条件判断更接近业务逻辑本身,而不是被迫拆成多层嵌套判断。

    2. irrefutable_let_patterns lint 不再在 let chains 上进行提示

    irrefutable_let_patterns这个 lint 现在不再对let chains发出提示。
    这项变化主要是为了减少误报,让 lint 行为更符合实际语义。

    3. 支持对路径段关键字进行重命名导入

    Rust 现在支持导入path-segment keywords并进行 renaming。
    这属于导入系统的一项增强,意味着某些在路径段中具有关键字属性的标识,也可以通过更灵活的方式重新命名后导入,提升了模块引用的表达能力。

    4. PowerPC 与 PowerPC64 的 inline assembly 稳定

    Rust 1.95.0 稳定了 PowerPC 和 PowerPC64 平台的 inline assembly。
    这对于需要直接编写底层汇编代码的场景尤其重要,说明 Rust 在更多架构上的低层能力正在逐步完善。

    5. const-eval:typed copies 时 padding 的行为更加一致

    这次版本对 const-eval 中 typed copies 的 padding 行为做了更一致的处理。
    这属于比较底层但非常关键的修正,因为 const 计算中对字节填充的处理方式更统一后,能减少一些边缘情况下的行为差异。

    6. const blocks 不再用于判断涉及 fallible operations 的表达式是否可被隐式常量提升

    这是一个很重要的行为变化。
    以前,const blocks 会被用于判断某些包含可失败操作的表达式能否被隐式 constant promotion。现在不再这样做。
    也就是说,如果一个表达式是否能隐式提升,依赖于 const block 的结果,那么这种表达式将不再被隐式提升。

    这会影响一些依赖隐式常量提升的代码路径,尤其是在更复杂的常量表达式场景下。

    7. 模式匹配的操作语义不再依赖 crate 和 module

    Rust 1.95.0 调整了 pattern matching 的 operational semantics,使其不再依赖 crate 和 module。
    这是一项语义层面的改进,目的在于让模式匹配的行为更独立、更一致,减少由于模块或 crate 结构差异带来的潜在影响。

    三、Compiler:编译器更新重点

    编译器部分的更新一方面涉及新参数稳定,另一方面也有安全修复和构建行为调整。

    1. 稳定 –remap-path-scope

    --remap-path-scope现在被稳定,用于控制路径重映射在最终二进制中的作用范围。
    对于需要控制编译产物中路径信息暴露范围的场景来说,这项能力会非常有用。它使路径重映射不再只是简单的“替换路径”,而是可以更精细地控制作用域。

    2. 为 vendored musl 应用 CVE-2026-6042 和 CVE-2026-40200 补丁

    Rust 1.95.0 对 vendored musl 应用了针对 CVE-2026-6042 和 CVE-2026-40200 的补丁。
    这说明本次更新也包含安全层面的修复,尤其与 musl 相关的构建环境和目标平台会受到影响。
    对于使用相关工具链的用户来说,这类修复是升级的重要理由之一。

    四、Platform Support:平台支持范围扩大

    Rust 一直在持续扩展平台覆盖面,1.95.0 也延续了这一趋势。

    1. powerpc64-unknown-linux-musl 提升为 Tier 2 with host tools

    该目标平台被提升到 Tier 2 with host tools。
    这意味着它的支持等级进一步提升,平台可用性更强。

    2. 多个 Apple 平台目标提升为 Tier 2

    本次版本将以下目标提升为 Tier 2:

    • aarch64-apple-tvos

  • • aarch64-apple-tvos-sim

  • • aarch64-apple-watchos

  • • aarch64-apple-watchos-sim

  • • aarch64-apple-visionos

  • • aarch64-apple-visionos-sim

    这表明 Rust 对 Apple 新一代系统与模拟器目标的支持继续增强。
    对于需要在这些平台上构建和验证 Rust 代码的开发者来说,这无疑是一个积极信号。

    五、Libraries:标准库与库文档更新

    标准库层面的变化非常丰富,既有文档说明,也有性能优化。

    1. thread::scope:补充 join 与 TLS destructors 的交互说明

    thread::scope的文档现在补充了join和 TLS destructors 之间如何交互的说明。
    这有助于开发者更准确地理解线程作用域、线程退出以及线程局部存储析构之间的关系,减少误用。

    2. 在默认启用 neon target feature 的 aarch64 目标上加速 str::contains

    str::contains在默认启用 neon target feature 的 aarch64 目标上得到了性能提升。
    这属于标准库层面的实用优化,虽然不改 API,但会直接影响字符串查找相关代码的性能表现。

    六、Stabilized APIs:本次稳定的 API 一览

    Rust 1.95.0 中稳定了不少 API,覆盖内存处理、原子类型、集合操作、布局计算等多个方向。下面逐项整理。

    1. MaybeUninit 数组相关转换与引用能力

    本次稳定了以下 API:

    MaybeUninit<[T; N]>: From<[MaybeUninit

    ; N]>

  • MaybeUninit<[T; N]>: AsRef<[MaybeUninit

    ; N]>

  • MaybeUninit<[T; N]>: AsRef<[MaybeUninit

    ]>

  • MaybeUninit<[T; N]>: AsMut<[MaybeUninit

    ; N]>

  • MaybeUninit<[T; N]>: AsMut<[MaybeUninit

    ]>

  • [MaybeUninit

    ; N]: From

    >

    这组 API 对数组初始化和逐步构造非常有帮助。
    MaybeUninit常用于需要手动控制初始化过程的场景,这些转换和引用能力的稳定,意味着处理数组级别未初始化数据时会更加自然。

    2. Cell 数组相关 AsRef 稳定

    以下 API 也已稳定:

    Cell<[T; N]>: AsRef<[Cell

    ; N]>

  • Cell<[T; N]>: AsRef<[Cell

    ]>

  • Cell<[T]>: AsRef<[Cell

    ]>

    这让Cell在数组和切片层面的引用转换更方便。

    3. bool: TryFrom<{integer}>

    bool: TryFrom<{integer}>已稳定。
    这意味着从整数向bool的受控转换能力更完善,不过它依然是TryFrom语义,强调转换可能失败而不是盲目转换。

    4. 原子类型的 update 与 try_update

    以下 API 被稳定:

    AtomicPtr::update

  • AtomicPtr::try_update

  • AtomicBool::update

  • AtomicBool::try_update

  • AtomicIn::update

  • AtomicIn::try_update

  • AtomicUn::update

  • AtomicUn::try_update

    这些 API 提供了更方便的原子更新机制,适用于需要基于当前值进行计算并写回的新场景。
    相比手写循环或更低层的原子操作,这些接口在表达上更直接,也更贴近实际并发更新需求。

    5. cfg_select!

    cfg_select!现在稳定。
    这是一个与条件编译相关的重要能力,能够帮助开发者在编译期根据配置选择不同分支,增强跨平台和特性分支代码的组织能力。

    6. mod core::range

    core::range模块已稳定。
    这意味着范围相关的核心能力被进一步正式化,为范围类型及其迭代行为提供更明确的标准库支持。

    7. core::range::RangeInclusive

    core::range::RangeInclusive稳定。
    这类范围类型是 Rust 中非常常见的基础表达工具,稳定后使用更加明确。

    8. core::range::RangeInclusiveIter

    core::range::RangeInclusiveIter也已稳定。
    这让包含边界的区间迭代行为有了更清晰的标准库支持。

    9. core::hint::cold_path

    core::hint::cold_path稳定。
    这类 hint 通常用于向编译器传达路径冷热信息,从而帮助优化生成代码。

    10. 指针上的 as_ref_unchecked / as_mut_unchecked

    以下 API 已稳定:

    <*const T>::as_ref_unchecked

  • <*mut T>::as_ref_unchecked

  • <*mut T>::as_mut_unchecked

    这类接口明显偏底层,允许开发者在确认安全条件的前提下进行更直接的指针引用转换。
    由于它们带有 unchecked 特征,因此使用时要非常谨慎。

    11. Vec 相关可变插入接口

    以下 API 稳定:

    Vec::push_mut

  • Vec::insert_mut

    这类 API 对于需要直接在向量内部构造或修改元素的场景很有帮助,能减少一些中间步骤。

    12. VecDeque 相关可变插入接口

    以下 API 稳定:

    VecDeque::push_front_mut

  • VecDeque::push_back_mut

  • VecDeque::insert_mut

    这让双端队列在两端和中间的插入操作更灵活。

    13. LinkedList 相关可变插入接口

    以下 API 也已稳定:

    LinkedList::push_front_mut

  • LinkedList::push_back_mut

    这为链表的头尾构造提供了更直接的接口。

    14. Layout::dangling_ptr

    Layout::dangling_ptr稳定。
    这一能力与内存布局相关,通常用于底层内存管理场景。

    15. Layout::repeat / repeat_packed / extend_packed

    以下布局相关 API 稳定:

    Layout::repeat

  • Layout::repeat_packed

  • Layout::extend_packed

    这些能力与结构体、数组、打包布局的计算密切相关,在进行内存布局推导和低层数据结构设计时很有价值。

    七、这些 API 现在也可在 const 上下文中使用

    Rust 1.95.0 还宣布了一批此前已稳定的 API 现在也可以在 const contexts 中使用:

    fmt::from_fn

  • ControlFlow::is_break

  • ControlFlow::is_continue

    这意味着这些能力现在不仅可以在普通运行时代码中使用,也能在 const 场景下发挥作用。
    对于需要更多编译期表达能力的代码来说,这是一项非常实用的扩展。

    八、Rustdoc:文档工具更新

    Rustdoc 在本次版本中也有两项重要变化。

    1. 搜索结果中降低 unstable items 的排序优先级

    Rustdoc 的搜索结果现在会把 unstable items 排在更后的位置。
    这会让用户在搜索文档时更容易优先看到可用、稳定的条目,提升查找体验。

    2. 新增 “hide deprecated items” 设置

    Rustdoc 增加了一个新的 “hide deprecated items” 设置。
    这对阅读文档时减少噪音很有帮助,尤其在大型库文档中,屏蔽掉已废弃项目能让信息更聚焦。

    九、Compatibility Notes:兼容性变化重点

    升级 Rust 1.95.0 时,以下兼容性变化需要特别关注,因为它们可能会影响现有代码或构建流程。

    1. 数组 coercions 可能带来更少的推断约束

    数组 coercions 现在可能引入比之前更少的 inference constraints。
    这类变化会影响类型推断行为,通常表现为某些代码的推断结果与之前略有不同。

    2. 不再允许不重命名地导入 $crate

    use $crate::{self};现在不再被允许,这是因为对 self imports 的错误检查更严格了。
    这是一项比较明确的兼容性收紧,需要留意宏或内部导入写法。

    3. const-eval padding 行为更一致,极少数情况下可能导致编译错误

    前面提到的 typed copies padding 行为修正,在极少数情况下可能导致编译错误。
    原因是某些指针相关字节可能进入 const 或 static 的 padding bytes。
    虽然这种情况非常少见,但如果你的代码涉及底层内存布局、指针字节和常量初始化,就要特别注意。

    4. ambiguous_glob_imported_traits 未来不兼容警告

    当使用有歧义的 glob 导入 trait 时,现在会报告ambiguous_glob_imported_traits未来不兼容警告。
    这有助于提前暴露潜在冲突,避免后续升级带来更大问题。

    5. 检查仅提到类型参数的类型的 lifetime bounds

    现在会检查那些只提到类型参数的类型的 lifetime bounds。
    这项变化会让边界检查更严格,从而暴露出过去可能被放过的一些问题。

    6. 报告更多 visibility 相关的歧义导入错误

    与可见性相关的 ambiguous import 错误现在会被报告得更充分。
    这意味着一些以前可能不明显的导入歧义,现在会更早被发现。

    7. Deprecate Eq::assert_receiver_is_total_eq 并对手动 impl 发出未来兼容性警告

    Eq::assert_receiver_is_total_eq现在被弃用,同时对手动 impl 会发出未来兼容性警告。
    这项变化和 trait 语义一致性有关,升级时最好检查相关实现。

    8. powerpc64:使用 target spec 中设置的 ELF ABI version,而不是猜测

    powerpc64现在会使用 target spec 中设置的 ELF ABI 版本,而不是自行猜测。
    这也修复了 OpenBSD 目标所使用的 ELF ABI。
    如果你涉及 powerpc64 相关构建,这一变化非常关键。

    9. 匹配 #[non_exhaustive] 枚举时现在会读取 discriminant

    即使一个#[non_exhaustive]枚举只有一个 variant,匹配它时也会读取 discriminant。
    这可能导致某些 closure 捕获与之前不同的值。
    这是一个容易忽略但确实可能影响行为的变化点。

    10. mut ref 和 mut ref mut 模式在 struct pattern field shorthand 中重新正确限制为 unstable

    这些模式本来属于 Match Ergonomics 2024 RFC 的不稳定内容,但曾经在稳定版的 struct pattern field shorthand 中被意外允许。
    现在它们已经被正确地 feature-gated 为 unstable。
    如果你的代码使用了这类写法,升级时需要特别检查。

    11. 为与内建属性冲突的 derive helper attributes 添加未来兼容性警告

    当 derive helper attributes 和内建属性冲突时,现在会增加未来兼容性警告。
    这有助于尽早发现潜在命名冲突。

    12. JSON target specs 重新被 destabilized,并需要 -Z unstable-options

    JSON target specs 现在被重新设为不稳定,需要-Z unstable-options才能使用。
    此前它们在没有标准库时不能使用,而标准库又没有稳定的构建方式。
    为了配合未来 build-std 的支持,Rust 现在主动将 JSON target specs 保持为不稳定,以免在 build-std 稳定后失去这种边界控制。
    Cargo 现在会包含-Z json-target-specCLI 标志,在需要时自动向编译器传递-Z unstable-options

    13. 无效 target 上的 #[feature] 参数现在会被检查

    #[feature]属性在无效 target 上的参数,现在会被检查。
    这意味着编译器会更早地发现不合法配置,减少潜在误用。

    十、Internal Changes:内部变化

    Rust 1.95.0 还包含一项重要的内部更新:

    • 更新至 LLVM 22

    这项变化不直接影响公开 API,但会带来 rustc 及相关工具内部性能和实现层面的提升。
    对于整个编译器生态来说,这类升级通常意味着底层优化、代码生成改进,以及更多内部一致性的增强。

    十一、总结:Rust 1.95.0 值得关注的原因

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

    如果要用一句话概括 Rust 1.95.0,那就是:
    这是一次覆盖面很广、既有语言层稳定,也有标准库扩展,同时兼顾兼容性与平台支持的重要版本。

    它的亮点主要包括:

    • match arms 上的 if let guards 稳定

  • • 多个MaybeUninitCell、原子类型、布局计算相关 API 稳定

  • cfg_select!core::rangecore::hint::cold_path等能力正式可用

  • VecVecDequeLinkedList的可变插入接口更完善

  • • Rustdoc 的搜索和隐藏废弃项体验更好

  • • 平台支持范围扩展到多个 Apple 新目标以及 powerpc64-linux-musl

  • • LLVM 22 更新带来内部能力提升

  • • 若干兼容性变化需要升级时认真排查

    对于准备升级到 Rust 1.95.0 的项目来说,建议重点关注以下几类代码:

    1. 依赖 const 语义和 typed copies 的代码

  • 2. 使用宏、$crate、trait glob 导入、derive helper attributes 的代码

  • 3. 涉及#[non_exhaustive]枚举匹配的代码

  • 4. 使用 JSON target specs 的构建流程

  • 5. 依赖 powerpc64、musl、Apple 新平台目标的工程

  • 6. 使用底层指针、布局计算、原子更新接口的实现

    总的来看,Rust 1.95.0 不是单点优化,而是一次从语言到工具链再到平台支持的全面升级。

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

    © 版权声明

    相关文章