2510rs,rust,1.84
1.84.0稳定版中有什么
Cargo考虑Rust版本来选择依赖版本
1.84.0稳定了最低支持的Rust版本(MSRV)的更喜欢与项目声明的MSRV兼容的依赖版本的相关解析器.
通过MSRV相关版本选择,维护者无需为每个依赖手动选择旧版本,从而减少了支持旧工具链的工作量.
可通过.cargo/config.toml选入MSRV相关解析器:
[resolver]
incompatiblerustversions = "fallback"
然后,在添加依赖时:
$ cargo add clap
在验证CI中的最新依赖时,可覆盖以下内容:
$ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=allow cargo update
也可通过在Cargo.toml清单文件中,设置package.resolver="3"来选入,但这需要将MSRV提高到1.84.对使用2024版本(将在1.85中稳定下来)的项目,将默认启用新的解析器.
这给库作者在决定采取新的Rust工具链功能的策略时,提供了更大的灵活性.
以前,采取新Rust工具链功能的库,会强制拥有旧Rust版本的该库的下游用户,升级他们的工具链或手动选择与其工具链兼容的旧版本的库(并避免运行cargo update).
现在,这些用户将可自动使用与其旧工具链兼容的旧库版本.
有关决定MSRV策略时的更多注意,见文档.
开始迁移新的特征求解器
Rust编译器正在为特征求解器,迁移到新实现.下一代特征求解器是对Rust类型系统核心组件的重新实现.
它不仅负责检查特征边界(如Vec<T>:Clone)是否成立,而且类型系统的许多其他部分还使用它,如规范化,找出<Vec<T>as IntoIterator>::Item的底层类型和等价类型(检查T和U是否相同).
在1.84中,用新的求解器来检查特征实现的一致性.在高层次上,一致性负责确保对给定类型的特征最多有一个实现,同时考虑其他箱中尚未编写或可见的代码.
该稳定化修复了旧实现的一些主要是理论上的正确性问题,导致潜在的以前未报告的"特征的冲突实现…"的错误.
根据求值Crater可用代码,期望受影响的模式会很少.稳定版还提高了证明实现不覆盖的能力,允许有时编写更多代码.
更多细节,见之前的博客文章和稳定报告.
这里
这里
严格的源API
在Rust中,指针不仅是一个"整数"或"地址".如,即使你"幸运"且在读/写释放的内存之前再分配了它,"释放后使用"也是未定义行为.
再举一例,即使通过不同指针写入同一地址是合法的,通过从&i32引用继承的指针写入是未定义行为.这里的底层模式是,指针的计算方式很重要,而不仅是计算产生的地址.
因此,说指针是有出处的:要完全表征Rust中与指针相关的未定义行为,不仅必须知道指针指向的地址,还必须跟踪它从哪些其他指针"继承".
一般,不需要太担心出处,如何继承指针是非常清楚的.但是,当来回在整数转换指针时,则低估了生成的指针的出处.
在此版本中,Rust添加了一组API,这些API在许多时候可替换整数指针转换的使用,从而避免此类转换固有的歧义.
特别是,现在可无需按整数来回转换指针,实现使用对齐指针的最低位来存储额外信息的模式.这使得代码更容易分析,编译器更容易分析,且还有利于Miri等工具和CHERI等架构为了检测和诊断指针误用.
更多细节,见有关出处的标准库文档,这里.
稳定的API
Ipv6Addr::is_unique_local
Ipv6Addr::is_unicast_link_local
core::ptr::with_exposed_provenance
core::ptr::with_exposed_provenance_mut
<ptr>::addr
<ptr>::expose_provenance
<ptr>::with_addr
<ptr>::map_addr
<int>::isqrt
<int>::checked_isqrt
<uint>::isqrt
NonZero::isqrt
core::ptr::without_provenance
core::ptr::without_provenance_mut
core::ptr::dangling
core::ptr::dangling_mut
Pin::as_deref_mut
如下在常环境下已稳定:
AtomicBool::from_ptr
AtomicPtr::from_ptr
AtomicU8::from_ptr
AtomicU16::from_ptr
AtomicU32::from_ptr
AtomicU64::from_ptr
AtomicUsize::from_ptr
AtomicI8::from_ptr
AtomicI16::from_ptr
AtomicI32::from_ptr
AtomicI64::from_ptr
AtomicIsize::from_ptr
<ptr>::is_null
<ptr>::as_ref
<ptr>::as_mut
Pin::new
Pin::new_unchecked
Pin::get_ref
Pin::into_ref
Pin::get_mut
Pin::get_unchecked_mut
Pin::static_ref
Pin::static_mut
更多推荐


所有评论(0)