宣布 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)。请报告您遇到的任何错误!

1.76.0 稳定版中的新内容

此版本相对较小,但与往常一样,即使是增量改进也会带来更大的整体效益。本文重点介绍了一些更改,其他更改可能还会满足更多利基需求。

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。没有你们,我们无法做到。 感谢!