Rust资讯: 新版本 1.77.0 发布

原文 Rust 团队很高兴宣布 Rust 新版本 1.77.0 的发布。Rust 是一种赋能每个人构建可靠和高效软件的编程语言。

如果你通过 rustup 安装了 Rust 的早期版本,你可以通过以下命令获得 1.77.0:

sql 复制代码
  rustup update stable 

如果你还没有安装,你可以从我们网站上的适当页面获取 rustup,并查看 1.77.0 的详细发布说明

如果你想通过测试未来的发布版本来帮助我们,你可以考虑本地更新到使用 beta 频道(rustup default beta)或夜间频道(rustup default nightly)。请报告你可能遇到的任何错误!

1.77.0 稳定版中的内容

这个版本相对较小,但如同往常一样,即使是渐进的改进也会导致更大的整体改善。这篇文章突出了一些改变,其他的可能还满足了更多特定需求。

C 字符串字面量

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

在 async fn 中支持递归

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

默认在发布配置中启用 strip

Cargo 配置中不启用输出的 debuginfo(例如,debug = 0)将默认启用 strip = "debuginfo"。

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

希望启用 debuginfo 的用户可以在相关的 Cargo 配置文件中使用 debug 标志明确启用它。

稳定化的 API

其他变化

查看 RustCargoClippy 中的所有更改。

1.77.0 的贡献者

许多人齐心协力创建了 Rust 1.77.0。 没有你们所有人,我们不可能做到这一点。 谢谢

相关推荐
木易 士心5 小时前
Go、Rust、Kotlin、Python 与 Java 从性能到生态,全面解读五大主流编程语言
java·golang·rust
badmonster06 小时前
AI ETL需要不同的原语:从构建CocoIndex中学到的Rust经验🦀
rust·aigc
Source.Liu8 小时前
【Chrono库】Chrono 本地时区模块解析(src/offset/local/mod.rs)
rust·time
干饭比赛第一名获得者9 小时前
🚀 终极指南:Mac M4 编译 Rust 至 Linux (AMD64)
后端·rust
未来之窗软件服务10 小时前
幽冥大陆(三十六)S18酒店门锁SDK rust语言——东方仙盟筑基期
开发语言·c++·rust·智能门锁·东方仙盟sdk·东方仙盟一体化
ALex_zry11 小时前
C语言底层编程与Rust的现代演进:内存管理、系统调用与零成本抽象
c语言·算法·rust
ALex_zry12 小时前
内核开发者的视角:C与Rust在系统编程中的哲学与实践
c语言·开发语言·rust
u***451612 小时前
Windows安装Rust环境(详细教程)
开发语言·windows·rust
星释13 小时前
Rust 练习册 101:字符串序列切片的艺术
开发语言·后端·rust
Source.Liu13 小时前
【Chrono库】Android和OpenHarmony系统绑定(src/offset/local/tz_data.rs)
rust·time