宣布 Rust 1.57.0

2021 年 12 月 2 日 · Rust 发布团队

Rust 团队很高兴宣布 Rust 的新版本 1.57.0。Rust 是一种编程语言,它赋予每个人构建可靠且高效软件的能力。

如果您之前通过 rustup 安装了 Rust,获取 Rust 1.57.0 就像这样简单

$ rustup update stable

如果您还没有,您可以从我们网站上的相应页面获取 rustup,并查看 GitHub 上的1.57.0 的详细发布说明

1.57.0 稳定版中的新内容

Rust 1.57 将 panic! 带到了常量上下文中,增加了对 Cargo 自定义配置文件的支持,并稳定了易错预留 API。

常量上下文中的 panic!

在之前的 Rust 版本中,panic! 宏在 const fn 和其他编译时上下文中不可用。现在,它已经稳定了。随着 panic! 的稳定,几个其他标准库 API 现在可以在常量中使用,例如 assert!

此稳定化尚未包含完整的格式化基础设施,因此 panic! 宏必须使用静态字符串 (panic!("...")) 或使用单个 &str 插值值 (panic!("{}", a)) 调用,该值必须与 {} 一起使用(无格式说明符或其他特征)。

预计将来这种支持将扩展,但这种最小的稳定化已经允许进行简单的编译时断言,例如验证类型的尺寸

const _: () = assert!(std::mem::size_of::<u64>() == 8);
const _: () = assert!(std::mem::size_of::<u8>() == 1);

Cargo 对自定义配置文件的支持

Cargo 长期以来支持四种配置文件:devreleasetestbench。在 Rust 1.57 中,添加了对任意命名配置文件的支持。

例如,如果您只想在进行最终生产构建时启用链接时优化 (LTO),将以下代码段添加到 Cargo.toml 中,在选择此配置文件时启用 lto 标志,但避免为常规发布构建启用它。

[profile.production]
inherits = "release"
lto = true

请注意,自定义配置文件必须指定一个配置文件,从中继承默认设置。定义配置文件后,可以要求构建代码的 Cargo 命令使用 --profile production 来使用它。目前,这将在一个单独的目录中构建工件(在本例中为 target/production),这意味着工件不会在目录之间共享。

易错分配

Rust 1.57 稳定了 VecStringHashMapHashSetVecDequetry_reserve。此 API 使调用者能够以易错的方式为这些类型的后备存储分配内存。

如果全局分配器失败,Rust 通常会中止进程,这并不总是可取的。此 API 提供了一种方法,可以在使用标准库集合时避免该中止。但是,Rust 不保证返回的内存实际上是由内核分配的:例如,如果在 Linux 上启用了 overcommit,则在尝试使用内存时,内存可能不可用。

稳定化的 API

以下方法和特征实现已稳定。

以下先前稳定的函数现在是 const

其他更改

Rust 1.57.0 版本中还有其他更改:查看RustCargoClippy 中的更改。

1.57.0 的贡献者

许多人共同创建了 Rust 1.57.0。没有你们,我们无法做到。 感谢!