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 升级的更多信息,可以查阅:

相关推荐
桦说编程15 小时前
你的函数什么颜色?—— 深入理解异步编程的本质问题(上)
后端·性能优化·编程语言
ssshooter20 小时前
Tauri 项目实践:客户端与 Web 端的授权登录实现方案
前端·后端·rust
AI智动派1 天前
《深入 Rust Async/Await:如何实现一个带超时保护与安全沙箱的 LLM Agent 循环》
rust
冬奇Lab1 天前
一天一个开源项目(第44篇):GitNexus - 零服务器的代码智能引擎,为 AI Agent 构建代码库知识图谱
人工智能·开源·资讯
范特西林3 天前
一次 to_bits() 引发的 Rust 与 C++ 底层思考
rust
冬奇Lab3 天前
一天一个开源项目(第43篇):Star-Office-UI - 像素风格的 AI 办公室看板,让 AI 助手的工作状态可视化
人工智能·开源·资讯
冬奇Lab4 天前
一天一个开源项目(第42篇):OpenFang - 用 Rust 构建的 Agent 操作系统,16 层安全与 7 个自主 Hands
人工智能·rust·开源
codetown4 天前
C3 编程语言:现代系统级开发的演进与工程实践全指南
编程语言
量子位4 天前
Transformer论文作者重造龙虾,Rust搓出钢铁版,告别OpenClaw裸奔漏洞
rust·openai·ai编程
IT老小子4 天前
【C++STL】Vector的使用(1)
编程语言