Rust 团队宣布了 Rust 编程语言的最新版本 1.77.0。这个版本虽然相对小,但包含了一系列改进,使得 Rust 语言更加强大和易用。
C-string 字面量: Rust 现在支持 C-string 字面量(例如 c"abc"
),它们会扩展为内存中以 null 字节终止的字符串,类型为 &'static CStr
。这对于编写与需要 null 终止字符串的外语接口互操作的代码非常方便,所有相关的错误检查(例如,内部 null 字节的缺失)都会在编译时进行。
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!
宏,该宏提供了访问结构体字段字节偏移量的方法。这在使用类型实例之前需要字段偏移量时特别有用。
let offset: usize = offset_of!(StructName, field);
在非调试配置中默认启用 strip: 没有启用调试信息(例如,debug = 0
)的 Cargo 配置现在默认会启用 strip = "debuginfo"
。
Clippy 新增 incompatible_msrv
检查: 为了避免开发者在编写代码时不小心使用了比声明的最小支持 Rust 版本(MSRV)更新的 API,Clippy 新增了一个 incompatible_msrv
检查。
array::each_ref
和 array::each_mut
core::net
f32::round_ties_even
和 f64::round_ties_even
slice::first_chunk
, slice::last_chunk
, slice::chunk_by
等。Bound::map
File::create_new
Mutex::clear_poison
和 RwLock::clear_poison
更多详细内容: https://blog.rust-lang.org/2024/03/21/Rust-1.77.0.html
Red Hat 的显示驱动团队正在规划 Nova,这是一个用 Rust 编写的新型 Linux DRM 内核驱动程序。Nova 旨在成为 Nouveau 驱动的继任者,专为支持 GPU 系统处理器(GSP)的 NVIDIA GPU 设计,特别是 Turing 及后续系列。Nova 的开发正值 Rust 内核抽象尚未完全上游化的时期,这一挑战性的项目预计将提升性能并降低维护难度。
相关新闻链接: https://www.phoronix.com/news/Red-Hat-Nova-Rust-Abstractions
reqwest
迎来了 v0.12 版本,这是一个为 Rust 语言打造的高级 HTTP 客户端库。此版本的主要亮点是升级到了 hyper
v1,同时对一些可选功能进行了改进,如 http2
和 charset
,现在可以按需启用或禁用,从而减小编译时间和体积。尽管 HTTP/3 功能暂时被禁用,但开发团队计划尽快恢复,并探索添加其他 QUIC 后端的可能性。
相关新闻链接: https://seanmonstar.com/blog/reqwest-v012/
Rust 语言的一个关键特性 macro_metavar_expr
的子集正在提案稳定化。这个特性包括 count
、ignore
、index
和 length
,它们将极大地增强宏的表达能力。稳定化这些功能将为 Rust 开发者提供更多的灵活性和强大的宏编写工具。该提案计划在 Rust 1.80 版本中实现稳定化,预计在 2024 年 6 月进入 Beta 阶段,7 月正式稳定。
相关提案链接: https://github.com/rust-lang/rust/pull/122808
本周 Rust 周报发布。
详见 This Week in Rust 539: https://this-week-in-rust.org/blog/2024/03/20/this-week-in-rust-539/