代码 Rust 1.90 默认启用 LLD:构建、发布与兼容性变更

2026-10-08 21:05:21

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_signed
  • u{n}::overflowing_sub_signed
  • u{n}::saturating_sub_signed
  • u{n}::wrapping_sub_signed
  • impl Copy for IntErrorKind
  • impl Hash for IntErrorKind
  • CStr、CString、Cow 之间的 PartialEq

const 上下文稳定的既有 API

以下既有 API 在 const 上下文稳定:

  • <[T]>::reverse
  • f32、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。

参考链接

复制全文 生成海报 Rust LLD 构建 Cargo 兼容性

推荐文章

程序员茄子在线接单