Rust 1.77.0 发布公告

2024年3月21日 · Rust 发布团队

Rust 团队很高兴地宣布 Rust 的新版本 1.77.0。Rust 是一种编程语言,旨在帮助所有人构建可靠且高效的软件。

如果您之前通过 rustup 安装了 Rust,可以使用以下命令获取 1.77.0:

$ rustup update stable

如果您还没有安装,可以从我们网站的相应页面获取 rustup,并查看1.77.0 的详细发布说明

如果您想通过测试未来版本来帮助我们,可以考虑将本地更新为使用 beta 通道 (rustup default beta) 或 nightly 通道 (rustup default nightly)。请报告您可能遇到的任何错误!

1.77.0 稳定版的新特性

此版本相对较小,但正如以往一样,即使是渐进式的改进也会带来更大的整体提升。本文重点介绍了一些更改,其他更改可能会满足更特定的需求。

C 字符串字面量

Rust 现在支持 C 字符串字面量 (c"abc"),它会扩展为内存中类型为 &'static CStr 的以空字节结尾的字符串。这使得编写与需要以空字符结尾的字符串的外部语言接口进行交互的代码更加容易,所有相关的错误检查(例如,缺少内部空字节)都在编译时执行。

支持 async fn 中的递归

由于编译器限制,异步函数之前不能调用自身。在 1.77 中,此限制已解除,因此允许递归调用,只要它们使用某种形式的间接来避免函数状态的无限大小。

这意味着像这样的代码现在可以工作了

async fn fib(n: u32) -> u32 {
   match n {
       0 | 1 => 1,
       _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await
   }
}

offset_of!

1.77.0 稳定了结构体字段的 offset_of!,它提供了对结构体相关公共字段的字节偏移量的访问。当需要在没有类型现有实例的情况下需要字段的偏移量时,此宏最有用。在稳定版上已经可以实现这样的宏,但是如果没有类型的实例,则该实现将需要棘手的不安全代码,这很容易意外引入未定义的行为。

用户现在可以使用 offset_of!(StructName, field) 访问公共字段的偏移量。它会扩展为一个 usize 表达式,表示从结构体开始的偏移量(以字节为单位)。

默认在发布配置文件中启用 strip

Cargo 配置文件在输出中不启用 debuginfo(例如,debug = 0)将默认启用 strip = "debuginfo"

这主要是因为(预编译的)标准库附带了 debuginfo,这意味着即使本地编译没有显式请求 debuginfo,静态链接的结果也会包含标准库中的 debuginfo。

想要 debuginfo 的用户可以使用相关 Cargo 配置文件中的 debug 标志显式启用它。

稳定的 API

其他更改

查看 RustCargoClippy 中的所有更改。

1.77.0 的贡献者

很多人共同努力创建了 Rust 1.77.0。没有大家,我们不可能做到这一点。谢谢!