宣布 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! 用于结构体字段,它提供对结构体相关公共字段的字节偏移量的访问。当需要字段的偏移量而没有类型实例时,此宏最为有用。在稳定版中,实现此类宏已经成为可能,但如果没有类型实例,实现将需要棘手的 unsafe 代码,这很容易意外地引入未定义的行为。

用户现在可以使用 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。没有你们,我们无法做到。 感谢!