Rust 1.90.0 发布:新特性、编译器改进与兼容性更新详解

举报
福大大架构师每日一题 发表于 2025/09/20 07:12:39 2025/09/20
【摘要】 Rust 语言团队于 2025 年 9 月 19 日 发布了 Rust 1.90.0 稳定版本。本次更新在语言特性、编译器、平台支持、标准库、Cargo、Rustdoc 以及兼容性方面带来了重要变化。本文将为你详细解读这些更新。 语言(Language)将 unknown_or_malformed_diagnostic_attributes lint 拆分。该 lint 已拆分为四个更细化的...

在这里插入图片描述

Rust 语言团队于 2025 年 9 月 19 日 发布了 Rust 1.90.0 稳定版本。本次更新在语言特性、编译器、平台支持、标准库、Cargo、Rustdoc 以及兼容性方面带来了重要变化。本文将为你详细解读这些更新。

语言(Language)

unknown_or_malformed_diagnostic_attributes lint 拆分。
该 lint 已拆分为四个更细化的 lint,现在 unknown_or_malformed_diagnostic_attributes 是包含以下 lint 的 lint 组:

  • unknown_diagnostic_attributes:当前编译器未知的诊断属性
  • misplaced_diagnostic_attributes:诊断属性放在了错误的位置
  • malformed_diagnostic_attributes:属性语法或选项不正确
  • malformed_diagnostic_format_literals:格式化字符串字面量错误

允许常量的最终值中包含对可变/外部内存的引用,但在模式匹配中拒绝此类常量。
允许对非 Rust 内存进行易失性(volatile)访问,包括访问地址 0


编译器(Compiler)

  • x86_64-unknown-linux-gnu 上默认使用 lld
  • 三级(Tier 3)musl 目标现在默认使用动态链接。受影响的目标包括:
  mips64-unknown-linux-muslabi64
  powerpc64-unknown-linux-musl
  powerpc-unknown-linux-muslspe
  powerpc-unknown-linux-musl
  riscv32gc-unknown-linux-musl
  s390x-unknown-linux-musl
  thumbv7neon-unknown-linux-musleabihf

平台支持(Platform Support)

  • x86_64-apple-darwin 降级为 Tier 2(含宿主工具)
  • 有关 Rust 平台分级支持的更多信息,请参考 Rust 官方的。

库(Libraries)

  • 稳定化 u*::{checked,overflowing,saturating,wrapping}_sub_signed
  • 允许在 CStrCStringCow<CStr> 之间比较
  • 移除部分无尺寸元组(unsized tuple)的实现,因为此类元组无法被构造
  • UnixStream 设置 MSG_NOSIGNAL 标志
  • proc_macro::Ident::new 现在支持 $crate
  • 保证 Thread::into_raw 返回的指针至少具有 8 字节对齐

稳定化的 API(Stabilized APIs)

  • u{n}::checked_sub_signed

  • u{n}::overflowing_sub_signed

  • u{n}::saturating_sub_signed

  • u{n}::wrapping_sub_signed

  • impl Copy for IntErrorKind

  • impl Hash for IntErrorKind

  • impl PartialEq<&CStr> for CStr

  • impl PartialEq<CString> for CStr

  • impl PartialEq<Cow<CStr>> for CStr

  • impl PartialEq<&CStr> for CString

  • impl PartialEq<CStr> for CString

  • impl PartialEq<Cow<CStr>> for CString

  • impl PartialEq<&CStr> for Cow<CStr>

  • impl PartialEq<CStr> for Cow<CStr>

  • impl PartialEq<CString> for Cow<CStr>


这些先前已稳定的 API,现在也在 const 上下文(const contexts) 中稳定:

  • <[T]>::reverse
  • f32::floor
  • f32::ceil
  • f32::trunc
  • f32::fract
  • f32::round
  • f32::round_ties_even
  • f64::floor
  • f64::ceil
  • f64::trunc
  • f64::fract
  • f64::round
  • f64::round_ties_even

Cargo

  • 添加 http.proxy-cainfo 配置,用于代理证书
  • cargo package 使用 gix
  • 发布(publish):稳定化多包发布功能

Rustdoc

  • 新增可折叠所有 impl 块的功能。此前,“Summary” 按钮和 “-” 快捷键无法折叠 impl 块,现在在按住 Shift 时可以折叠
  • 不安全属性会用 unsafe() 包裹进行显示

兼容性说明(Compatibility Notes)

  • x86_64-unknown-linux-gnu 默认使用 lld
  • core::iter::FuseDefault 实现现在会按文档承诺的那样,内部构造 I::default(),而不是总是空的
  • UnixStream 现在会设置 MSG_NOSIGNAL。这可能改变程序行为,但会与其他原语(stdout、网络套接字)一致。依赖信号退出的程序应更新套接字写入错误的处理逻辑
  • 在 Unix 上,如果 HOME 环境变量为空,std::env::home_dir 会使用回退值
  • 统一在所有位置上拒绝不支持的 extern "{abi}",这主要影响对 extern "{abi}" fn() 指针实现 trait 的情况,例如 extern "stdcall" fn(),在不支持该 ABI 的平台(如 aarch64-unknown-linux-gnu)上会被拒绝。直接声明或定义这些不支持的 ABI 函数早已被拒绝,本次仅是行为一致化
  • const-eval:如果初始化一个 static 时写入了该 static,则报错
  • 检查 proc_macro_derive 宏在 crate 根部被使用时,参数是否正确

总结

Rust 1.90.0 在语言层面增强了诊断 lint 的精细化控制,增强了常量与内存交互的能力;编译器现在对 Linux x86_64 默认使用 lld 链接器,并对部分目标默认启用动态链接;标准库与 const API 覆盖面继续扩大;Cargo 和 Rustdoc 也增加了不少实用功能。同时,部分平台支持状态发生调整,开发者需要关注可能的兼容性变化。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。