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

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),这两个版本不太稳定,使用过程中可能遇到错误,如果遇到任何错误,可以发送报告

1.77.0 稳定版中有什么

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

支持 C-string 字面量

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

rust 复制代码
let c_string: &CStr = c"Hello, world!";

支持异步函数递归

异步函数之前由于编译器的限制无法调用自身。在 1.77 版本中,该限制已经解除,异步函数可以递归调用自己,只要使用某种形式的间接方式来避免函数状态的无限大小。

这意味着像下面这样的代码现在可以正常工作:

rust 复制代码
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 表达式,其中包含从结构体开头开始的字节偏移量。

rust 复制代码
let offset: usize = offset_of!(StructName, field);

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

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

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

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

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

稳定的 API 列表

  • array::each_refarray::each_mut
  • core::net
  • f32::round_ties_evenf64::round_ties_even
  • 一系列切片操作函数,如 slice::first_chunk, slice::last_chunk, slice::chunk_by 等。
  • Bound::map
  • File::create_new
  • Mutex::clear_poisonRwLock::clear_poison

其他变化

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

致敬贡献者

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

官方资料

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

相关推荐
非专业程序员3 小时前
精读 GitHub - servo 浏览器(一)
前端·ios·rust
h***06654 小时前
项目升级Sass版本或升级Element Plus版本遇到的问题
前端·rust·sass
星释12 小时前
Rust 练习册 72:多米诺骨牌与回溯算法
开发语言·算法·rust
HyperAI超神经1 天前
【TVM 教程】优化大语言模型
人工智能·语言模型·自然语言处理·cpu·gpu·编程语言·tvm
百锦再1 天前
第21章 构建命令行工具
android·java·图像处理·python·计算机视觉·rust·django
星释1 天前
Rust 练习册 66:密码方块与文本加密
java·前端·rust
星释1 天前
Rust 练习册 57:阿特巴什密码与字符映射技术
服务器·算法·rust
星释2 天前
Rust 练习册 44:Trait 中的同名函数调用
开发语言·后端·rust
朝九晚五ฺ2 天前
深入Rust标准库(std):核心能力与实战指南
开发语言·后端·rust
2013编程爱好者2 天前
Rust变量
开发语言·后端·rust