Rust 1.84.0 发布
Rust 1.84.0 稳定版已正式发布,主要带来以下变化:
Cargo 会考虑 Rust 版本来选择依赖版本
1.84.0 稳定了最低支持 Rust 版本(MSRV)感知解析器,该解析器会优先选择与项目声明的 MSRV 兼容的依赖版本。有了 MSRV 感知版本选择功能,维护者无需为每个依赖关系手动选择旧版本,从而减少了支持旧工具链的工作量。
可以通过.cargo/config.toml启用 MSRV 感知解析器:
[resolver]
incompatible-rust-versions = "fallback"
然后在添加依赖项时:
$ cargo add clap
Updating crates.io index
warning: ignoring clap@4.5.23 (which requires rustc 1.74) to maintain demo's rust-version of 1.60
Adding clap v4.0.32 to dependencies
Updating crates.io index
Locking 33 packages to latest Rust 1.60 compatible versions
Adding clap v4.0.32 (available: v4.5.23, requires Rust 1.74)
在 CI 中验证最新依赖项时,可以覆盖此项:
$ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=allow cargo update
Updating crates.io index
Locking 12 packages to latest compatible versions
Updating clap v4.0.32 -> v4.5.23
也可以通过在 Cargo.toml 清单文件中设置package.resolver = "3"来启用,但这要求将 MSRV 升级到 1.84。对于使用 2024 版(将在 1.85 版中稳定)的项目,新的解析器将默认启用。
可参阅文档以了解更多注意事项。
开始迁移到新的 trait solver
Rust 编译器正在向新的 trait solver 迁移。下一代 trait solver 是 Rust 类型系统核心组件的重新实现。在 1.84 中,新的求解器用于 trait impls 的一致性。从高层次上讲,连贯性负责确保在考虑其他 crate 中尚未编写或不可见代码的情况下,最多只有一个 trait 实现适用于给定类型。
此次 stabilization 修复了旧实现中的一些主要是理论正确性的问题,从而解决了以前未报告的潜在的“conflicting implementations of trait ...”错误。更多详细信息,可参阅之前的博客文章和 stabilization report。
Strict provenance APIs
在此版本中,Rust 添加了一组 API,在许多情况下可以替代整数指针转换的使用,从而避免此类转换固有的歧义。特别是,现在可以实现使用对齐指针的最低有效位来存储额外信息的模式,而无需将指针转换为整数或返回。这使得代码更易于推理,更易于编译器分析,并且还有利于 Miri 等工具和 CHERI 等旨在检测和诊断指针滥用的架构 。
稳定的 API
Ipv6Addr::is_unique_localIpv6Addr::is_unicast_link_localcore::ptr::with_exposed_provenancecore::ptr::with_exposed_provenance_mut<ptr>::addr<ptr>::expose_provenance<ptr>::with_addr<ptr>::map_addr<int>::isqrt<int>::checked_isqrt<uint>::isqrtNonZero::isqrtcore::ptr::without_provenancecore::ptr::without_provenance_mutcore::ptr::danglingcore::ptr::dangling_mutPin::as_deref_mut
这些 API 现在在 const 上下文中是稳定的
AtomicBool::from_ptrAtomicPtr::from_ptrAtomicU8::from_ptrAtomicU16::from_ptrAtomicU32::from_ptrAtomicU64::from_ptrAtomicUsize::from_ptrAtomicI8::from_ptrAtomicI16::from_ptrAtomicI32::from_ptrAtomicI64::from_ptrAtomicIsize::from_ptr<ptr>::is_null<ptr>::as_ref<ptr>::as_mutPin::newPin::new_uncheckedPin::get_refPin::into_refPin::get_mutPin::get_unchecked_mutPin::static_refPin::static_mut
更多详情可查看官方公告。