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

相关推荐
LvManBa6 小时前
Vue学习记录之六(组件实战及BEM框架了解)
vue.js·学习·rust
VinciYan12 小时前
Rust使用Actix-web和SeaORM库开发WebAPI通过Swagger UI查看接口文档
rust·api·web·orm
白总Server15 小时前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
新知图书20 小时前
Rust编程的作用域与所有权
开发语言·后端·rust
许野平1 天前
Rust: Warp RESTful API 如何得到客户端IP?
tcp/ip·rust·restful·ip地址
许野平2 天前
Rust:Result 和 Error
开发语言·后端·rust·error·result
Freestyle Coding2 天前
使用rust自制操作系统内核
c语言·汇编·microsoft·rust·操作系统
许野平3 天前
Rust 编译器使用的 C++ 编译器吗?
c++·rust
怪我冷i3 天前
Rust GUI框架Tauri V1 入门
rust
新知图书3 天前
Rust的常量
算法·机器学习·rust