在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Rust 1.94.0 于 2026 年 3 月 6 日正式发布,这一版本继续延续 Rust 一贯的稳定性和可持续发展方向,不仅在语言层面进行了更多的细节强化,还完善了对 RISC-V 平台的支持,并为 Cargo 增加了更强的配置管理能力。此次更新体现了 Rust 官方团队对语言精度、性能和跨平台能力的一贯追求。

这篇文章将详细解读 Rust 1.94.0 的全部新增特性、稳定化内容及兼容性变化,帮助开发者快速了解这一版本的主要亮点。


一、语言层面更新

Rust 1.94.0 在语言行为和编译检查层面进行了多项优化与增强。以下五项更新是重点:

  1. Impls 与 impl 项继承 dead_code lint 级别
    在过去版本中,某些 impl 块未能继承对应 trait 或 trait 项的 dead_code lint 配置,可能导致部分代码未被标记。现在,impls 和 impl items 将自动继承相应 trait 项的 dead_code lint 级别,使得 lint 行为更加一致,减少隐藏的未使用代码。

  2. 稳定化了 29 项 RISC-V 目标特性
    Rust 对 RISC-V 平台的支持进一步强化,这次新增并稳定了 29 项目标特性,包括 RVA22U64 和 RVA23U64 配置的大部分内容。此举显著提升了 Rust 在嵌入式和处理器架构层面的适配能力,为 RISC-V 开发者提供更完善的编译支持。

  3. 新增 warn-by-default unused_visibilities lint
    该 lint 专门用于检查常量声明中不必要的可见性修饰符。在 Rust 1.94.0 中,当为常量添加无效或无用的可见性时,会触发默认警告。这样可以帮助开发者保持更清晰的代码结构,避免滥用 visibility。

  4. 更新到 Unicode 17
    Rust 的字符与字符串处理逻辑现在全面兼容 Unicode 17 版本,提升了跨语言字符处理的一致性。这一更新使得文本相关的操作在国际化场景下更加可靠。

  5. 避免闭包中的错误生命周期推断
    编译器在闭包处理方面进行了关键修复,避免在复杂闭包捕获场景下出现错误的生命周期判断。之前某些闭包可能会提示错误的生命周期约束,现在该问题得到了有效规避。


二、平台支持升级

Rust 1.94.0 在平台支持列表中新增了一个全新的目标:

  • riscv64im-unknown-none-elf 被添加为 tier 3 目标

该目标旨在支持不依赖操作系统的 RISC-V 64 位裸机开发场景,为嵌入式开发者提供更多构建可能。虽然 tier 3 目标仍属于实验性阶段,但它的出现显示了 Rust 在硬件层面持续扩展的方向。

欲了解更多平台层级详情,可参考官方的 Rust 平台支持页面,该页面对 tier 分级机制做出了详细定义。


三、标准库更新与稳定 API

Rust 1.94.0 继续完善标准库结构与性能,新增稳定 API 列表如下:

  1. 新增稳定方法

    • <[T]>::array_windows:允许对数组切片执行滑动窗口操作。
    • <[T]>::element_offset:用于计算切片元素偏移位置。
    • LazyCell::getLazyCell::get_mutLazyCell::force_mut:为懒惰初始化单元增加访问和强制可变操作支持。
    • LazyLock::getLazyLock::get_mutLazyLock::force_mut:同类接口在 LazyLock 中得以稳定。
    • impl TryFrom<char> for usize:字符转 usize 的稳定实现。
    • std::iter::Peekable::next_if_mapstd::iter::Peekable::next_if_map_mut:迭代器在 Peekable 类型上的新方法,可以在满足条件时消费迭代元素。
    • x86 平台稳定化 AVX512FP16 指令(不依赖不稳定的 f16 类型)。
    • AArch64 平台稳定化 NEON fp16 指令(同样不依赖不稳定类型)。
    • 新增数学常量:
      f32::consts::EULER_GAMMAf64::consts::EULER_GAMMA
      f32::consts::GOLDEN_RATIOf64::consts::GOLDEN_RATIO
  2. const 上下文中新增稳定支持

    • f32::mul_add
    • f64::mul_add

这些先前稳定的方法现在可以在 const 上下文中安全使用,提升了常量表达能力。

  1. BinaryHeap 方法的泛型约束放宽
    部分 BinaryHeap<T> 方法放宽了对 T: Ord 的限制,使非严格有序类型的操作更灵活。

四、Cargo 工具链更新

Cargo 在本次更新中有四项重要改进:

  1. 稳定化 config include 功能
    顶层 include 配置键允许加载额外配置文件,使配置文件的组织、共享及跨项目管理更方便。这项功能让大型项目可以分层管理 Cargo 配置,从而提高可维护性。

  2. 稳定化 pubtime 字段
    Registry 索引中新增 pubtime 字段,用于记录 crate 版本的发布时间。未来将支持基于时间的依赖解析。虽然 crates.io 尚未完全回填旧包,但新版本发布后会逐步完善此字段。

  3. 支持 TOML v1.1
    Cargo 现已支持 TOML v1.1 解析,用于清单和配置文件。需要注意的是,若在 Cargo.toml 中使用了这些新语法功能,会提高开发者的最低支持版本要求,但不会影响已发布包对旧解析器的兼容性。

  4. 运行时支持 CARGO_BIN_EXE_ 环境变量
    Cargo 现在允许在运行时获取可执行文件路径,为工具链集成和动态加载提供便利。


五、兼容性说明

Rust 1.94.0 在兼容性方面带来一系列调整与警告机制优化。这些改动可能影响部分旧代码编译行为,需要开发者关注。

  1. 禁止自由生命周期转换在 dyn 类型中
    现在不再允许随意转换 dyn 类型的生命周期约束,增强了类型安全性。

  2. 闭包捕获行为改进
    捕获逻辑更加精确与一致。一些非移动闭包此前会错误地按移动方式捕获整个变量,现在系统能智能区分部分捕获按移动、部分捕获按借用。这可能引发新的借用检查报错或改变 Drop 触发时机。

  3. 标准库宏导入机制变更
    宏如今通过 prelude 引入,而不再使用注入式 #[macro_use]。
    当项目中有同名宏的全局导入时,现在会报错。开发者需显式导入宏以消除歧义。例外情形是 core::panic 与 std::panic,若存在歧义将触发新警告 ambiguous_panic_imports。这一变化可能会在 no_std 环境下看到新的警告提示。

  4. include! 不再剥离 shebang 行
    表达式上下文中的 include! 若包含以 shebang 开头的文件,现在将不再自动剥离,这可能导致此前能编译的文件出现错误。

  5. 跨 crate 的模糊重导出可见性调整
    Rust 统一了本地与跨 crate 之间的可见性行为,模糊的 glob 重导出现在在跨 crate 情境中也会触发错误,使模块导出判断更一致。

  6. where 子句不再在检查前归一化
    编译器将直接应用原始 where 限定以评估良构性,避免此前的规范化误差。

  7. 对空体 trait 方法的 codegen 属性警告
    在无实现体的 trait 方法上设置编译属性目前没有效果,系统引入未来兼容性警告提示。

  8. Windows 平台时间行为调整
    std::time::SystemTime::checked_sub_duration 计算结果早于 Windows 纪元(1601 年 1 月 1 日)时,现在将返回 None。

  9. 生命周期标识符 NFC 规范化
    所有生命周期名(例如 'a)现在采用标准 NFC 形式,避免了字符规范化差异。

  10. 文件路径处理重构
    编译器对文件名处理逻辑进行了全面调整,确保跨编译器一致性。
    所有编译输出路径都会严格保持原始相对或绝对形式,并遵循 --remap-path-prefix 参数。
    一项显著副作用是 Cargo 的本地 crate 路径依赖及工作区成员在下游诊断消息中显示为相对路径而非绝对路径。


六、内部变更

Rust 1.94.0 的内部调整不会影响公开接口,但显著改善了性能与工具一致性。

  • 采用 annotate-snippets 输出错误信息
    编译器错误输出现在切换到 annotate-snippets 框架,外观基本一致,但内部性能更优。这为未来的更丰富诊断格式奠定基础。

七、版本总体总结

Rust 1.94.0 是一次非大规模但非常关键的更新。此次版本的主要特点:

  • 对 RISC-V 架构的深入支持,使 Rust 更接近原生硬件级别编译语言。
  • Lint、生命周期与闭包捕获行为更严谨,使语言安全性再度提升。
  • Cargo 工具链增强配置能力与版本记录,为企业级项目管理创造新可能。
  • Unicode 17 标准完整支持,稳步提高国际化开发体验。
  • 文件路径和宏导入机制的统一调整,让跨平台行为更加一致。

这一版本延续了 Rust 的“稳定演进”理念,保持高度可预测的发布节奏,同时不断强化底层一致性与编译精度。
无论是系统编程、WebAssembly、嵌入式还是后端服务,Rust 1.94.0 都将提供更稳健的开发体验。

开发者可通过 rustup 工具快速升级本地编译环境至 1.94.0 版本,从而体验全新的稳定特性。


八、结语

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

从语言细节到工具链,从平台支持到兼容性警告,每一处细微改动都体现了 Rust 对高质量与安全性的执着。
1.94.0 是 Rust 在迈向更高层次稳定性道路上的又一个坚实步伐。它不仅让语言本身更精确,也为构建衍生生态(如嵌入式系统和跨平台工具)提供了坚实基础。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐