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!
,它提供了对结构体相关公共字段的字节偏移量的访问。当需要在没有类型实例的情况下获取字段的偏移量时,此宏最有用。在 stable 版本上已经可以实现这样的宏,但是在没有类型实例的情况下,实现将需要棘手的不安全代码,这很容易意外引入未定义的行为。
用户现在可以使用 offset_of!(StructName, field)
访问公共字段的偏移量。这将扩展为一个 usize
表达式,表示从结构体开始的字节偏移量。
默认在 release profile 中启用 strip
Cargo profile 中未启用输出中的 debuginfo(例如,debug = 0
)将默认启用 strip = "debuginfo"
。
这主要是因为(预编译的)标准库附带了 debuginfo,这意味着即使本地编译没有明确请求 debuginfo,静态链接的结果也会包含来自标准库的 debuginfo。
想要 debuginfo 的用户可以使用相关 Cargo profile 中的 debug 标志显式启用它。
稳定的 API
array::each_ref
array::each_mut
core::net
f32::round_ties_even
f64::round_ties_even
mem::offset_of!
slice::first_chunk
slice::first_chunk_mut
slice::split_first_chunk
slice::split_first_chunk_mut
slice::last_chunk
slice::last_chunk_mut
slice::split_last_chunk
slice::split_last_chunk_mut
slice::chunk_by
slice::chunk_by_mut
Bound::map
File::create_new
Mutex::clear_poison
RwLock::clear_poison
其他更改
查看 Rust、Cargo 和 Clippy 中发生的所有更改。
1.77.0 版本的贡献者
许多人齐心协力创造了 Rust 1.77.0。没有你们所有人,我们不可能做到。感谢!