Rust 团队很高兴地宣布 Rust 新版本 1.76.0 发布。Rust 是一种编程语言,旨在赋能每个人构建可靠且高效的软件。
如果您之前通过 rustup 安装了 Rust,您可以使用以下命令获取 1.76.0 版本:
$ rustup update stable
如果您尚未安装,您可以从我们网站上的相应页面获取 rustup
,并查看1.76.0 版本的详细发布说明。
如果您想通过测试未来的版本来帮助我们,您可以考虑在本地更新以使用 beta 频道 (rustup default beta
) 或 nightly 频道 (rustup default nightly
)。请报告您可能遇到的任何错误!
1.76.0 稳定版的新特性
此版本相对较小,但与往常一样,即使是渐进式的改进也能带来更大的整体提升。本文重点介绍其中一些更改,其他更改可能满足更小众的需求。
ABI 兼容性更新
函数指针文档中新增了ABI 兼容性章节,描述了函数签名 ABI 兼容性的含义。其中很大一部分是参数类型和返回类型的兼容性,并列出了当前在 Rust 中被认为是兼容的类型。在大多数情况下,此文档并未添加任何新的保证,只是描述了现有的兼容性状态。
唯一的新增内容是,现在保证 char
和 u32
是 ABI 兼容的。它们一直具有相同的大小和对齐方式,但现在即使在函数调用 ABI 中也被认为是等效的,这与上面的文档一致。
从引用获取类型名称
出于调试目的,any::type_name::<T>()
自 Rust 1.38 版本起就已可用,用于返回类型 T
的字符串描述,但这需要显式的类型参数。有时很难指定该类型,特别是对于像闭包或不透明返回类型这样的无法命名的类型。新的 any::type_name_of_val(&T)
提供了一种从对类型的任何引用中获取描述性名称的方法。
fn get_iter() -> impl Iterator<Item = i32> {
[1, 2, 3].into_iter()
}
fn main() {
let iter = get_iter();
let iter_name = std::any::type_name_of_val(&iter);
let sum: i32 = iter.sum();
println!("The sum of the `{iter_name}` is {sum}.");
}
目前输出如下:
The sum of the `core::array::iter::IntoIter<i32, 3>` is 6.
稳定的 API
Arc::unwrap_or_clone
Rc::unwrap_or_clone
Result::inspect
Result::inspect_err
Option::inspect
type_name_of_val
std::hash::{DefaultHasher, RandomState}
这些之前只能通过std::collections::hash_map
使用。ptr::{from_ref, from_mut}
ptr::addr_eq
其他更改
查看 Rust、Cargo 和 Clippy 中的所有更改。
1.76.0 版本的贡献者
许多人齐心协力创建了 Rust 1.76.0 版本。没有你们大家,我们不可能做到。感谢!