Rust 资讯:Rust 1.77.0 正式发布,支持异步函数递归

1,638 阅读3分钟

rust-course-banner.jpeg

Rust 团队日前发布了 Rust 的新版本 —— 1.77.0 正式版,Rust 是一种强大的编程语言,使开发者能够构建可靠、高效的软件。

关于 1.77.0 有关新特性可查看:blog.rust-lang.org/2024/03/21/…

如果已经安装了以前版本的 Rust,可以通过以下命令升级到 1.77.0 版本: $ rustup update stable

如果还没有安装,可以从网站上的相应页面获取 rustup , 并查看1.77.0 的详细发行说明 。也可以在 GitHub 上查看1.77.0 的发行日志 。

如果想使用测试未来版本,可以考虑在本地进行更新以使用 beta 版本(rustup default beta) 或 nightly 版本  (rustup default nightly),这两个版本不太稳定,使用过程中可能遇到错误,如果遇到任何错误,可以发送报告

f6c336fa464ba00733fb8be62738fb6b.png

1.77.0 稳定版中有什么

这个版本是小版本更新,主要带来一些渐进性的改进并来带来整体性提升,使得 Rust 语言更加强大和易用,本文主要介绍其中几个功能和改进:

支持 C-string 字面量

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

let c_string: &CStr = c"Hello, world!";

支持异步函数递归

异步函数之前由于编译器的限制无法调用自身。在 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 表达式,其中包含从结构体开头开始的字节偏移量。

let offsetusize = offset_of!(StructName, field);

在非调试配置中默认启用 strip

没有启用调试信息(例如,debug = 0)的 Cargo 配置现在默认会启用 strip = "debuginfo"

主要原因是(预编译的)标准库附带调试信息,这意味着即使本地编译没有明确请求调试信息,静态链接的结果也会包含来自标准库的调试信息。

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

注:doc.rust-lang.org/stable/carg…

稳定的 API 列表

  • array::each_ref 和 array::each_mut
  • core::net
  • f32::round_ties_even 和 f64::round_ties_even
  • 一系列切片操作函数,如 slice::first_chunkslice::last_chunkslice::chunk_by 等。
  • Bound::map
  • File::create_new
  • Mutex::clear_poison 和 RwLock::clear_poison

其他变化

了解更多有关Rust、Cargo 和 Clippy 中所有变化的详细信息,请参阅完整的发布说明 ,更新的详细列表可查看

致敬贡献者

许多人齐心协力创建了 Rust 1.77.0。谢谢所有人 

官方资料

关于1.77.0 升级的更多信息,可以查阅: