发布 Rust 1.76.0

2024年2月8日 · Rust 发布团队

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)。请报告你遇到的任何 bug!

1.76.0 stable 版本有什么新内容

这个版本改动相对较小,但一如既往,即使是渐进式的改进也能汇集成更完善的整体。本文重点介绍了一些改动,其他改动可能满足更小众的需求。

ABI 兼容性更新

函数指针文档中新增的ABI 兼容性部分描述了函数签名 ABI 兼容的含义。其中很大一部分是参数类型和返回类型的兼容性,以及目前在 Rust 中被认为兼容的列表。在大多数情况下,这份文档并没有增加新的保证,只是描述了现有的兼容状态。

新增的一点是,现在保证 charu32 是 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

其他改动

查看 RustCargoClippy 的所有改动。

1.76.0 的贡献者

许多人共同努力创建了 Rust 1.76.0。没有你们大家,我们无法完成这项工作。感谢!