Rust 1.90 默认启用 LLD:构建、发布与兼容性变更
Rust 1.90.0 于 2025-09-18 发布。发布说明见 Rust 1.90.0,版本细节可查 releases.rs/docs/1.90.0。
LLD 成为 x86_64-unknown-linux-gnu 默认链接器
x86_64-unknown-linux-gnu 默认使用 LLD,而不是 BFD 链接 Rust crate。变化主要影响链接性能,对大型二进制、包含大量调试信息的二进制以及增量重建更明显。
绝大多数情况下 LLD 与 BFD 向后兼容,通常除编译时间外没有差异。如果遇到新的链接问题,可以用 -C linker-features=-lld 退出,把它加到 RUSTFLAGS 或项目 .cargo/config.toml:
RUSTFLAGS="-C linker-features=-lld" cargo build
LLD 默认带来的取舍在构建侧:默认路径更快,但若项目依赖 BFD 的特定行为,需要按 target 或项目配置显式回退。相关说明见 rust-lld on 1.90.0 stable。
cargo publish --workspace
Cargo 原生支持 workspace 发布:cargo publish --workspace 会自动按依赖顺序发布工作区内所有 crate。此前需要外部工具或手工按序发布。
原生集成让 Cargo 的发布校验能在“仿佛已发布”的状态下构建整套待发布 crate,包括 dry-run。操作入口:
cargo publish --workspace
发布仍不是原子的:网络错误或服务端失败仍可能只发布了一部分 crate。发布侧需要把失败后的续发、版本状态检查纳入流程,不能把 --workspace 视为事务。
x86_64-apple-darwin 降为 Tier 2 with host tools
x86_64-apple-darwin 由 Tier 1 with host tools 降为 Tier 2 with host tools。原因是 GitHub 将停止为公共仓库提供免费 macOS x86_64 runner,Apple 也宣布停用 x86_64。
该 target 以及 rustc、cargo 等 host 工具仍保证构建,但不再保证通过自动化测试套件。短期没有影响,长期测试覆盖下降可能导致未公告的破坏。构建侧仍可产出,但发布前验证不能只依赖上游测试保证。
稳定化 API
以下 API 在 Rust 1.90 稳定:
u{n}::checked_sub_signedu{n}::overflowing_sub_signedu{n}::saturating_sub_signedu{n}::wrapping_sub_signedimpl Copy for IntErrorKindimpl Hash for IntErrorKindCStr、CString、Cow之间的PartialEq
const 上下文稳定的既有 API
以下既有 API 在 const 上下文稳定:
<[T]>::reversef32、f64的floor、ceil、trunc、fract、round、round_ties_even
兼容性注意
- 为
UnixStream设置MSG_NOSIGNAL。这会改变程序行为,但与 stdout、网络套接字等其他原语对齐。依赖信号终止的程序应改为处理写入错误后退出。 core::iter::Fuse的Default实现改为内部构造I::default()。- tier 3 musl target 默认动态链接。
proc_macro::Ident::new支持$crate。