Rust资讯: 新版本 1.77.0 发布
原文 Rust 团队很高兴宣布 Rust 新版本 1.77.0 的发布。Rust 是一种赋能每个人构建可靠和高效软件的编程语言。
如果你通过 rustup 安装了 Rust 的早期版本,你可以通过以下命令获得 1.77.0:
rustup update stable
如果你还没有安装,你可以从我们网站上的适当页面获取 rustup,并查看 1.77.0 的详细发布说明。
如果你想通过测试未来的发布版本来帮助我们,你可以考虑本地更新到使用 beta 频道(rustup default beta)或夜间频道(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
其他变化
查看 Rust、Cargo 和 Clippy 中的所有更改。
1.77.0 的贡献者
许多人齐心协力创建了 Rust 1.77.0。 没有你们所有人,我们不可能做到这一点。 谢谢!
转载自:https://juejin.cn/post/7350141010905333772