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 长期以来支持四种配置文件:dev
、release
、test
和 bench
。在 Rust 1.57 中,添加了对任意命名配置文件的支持。
例如,如果您只想在进行最终生产构建时启用链接时优化 (LTO),将以下代码段添加到 Cargo.toml 中,在选择此配置文件时启用 lto
标志,但避免为常规发布构建启用它。
[profile.production]
inherits = "release"
lto = true
请注意,自定义配置文件必须指定一个配置文件,从中继承默认设置。定义配置文件后,可以要求构建代码的 Cargo 命令使用 --profile production
来使用它。目前,这将在一个单独的目录中构建工件(在本例中为 target/production
),这意味着工件不会在目录之间共享。
易错分配
Rust 1.57 稳定了 Vec
、String
、HashMap
、HashSet
和 VecDeque
的 try_reserve
。此 API 使调用者能够以易错的方式为这些类型的后备存储分配内存。
如果全局分配器失败,Rust 通常会中止进程,这并不总是可取的。此 API 提供了一种方法,可以在使用标准库集合时避免该中止。但是,Rust 不保证返回的内存实际上是由内核分配的:例如,如果在 Linux 上启用了 overcommit,则在尝试使用内存时,内存可能不可用。
稳定化的 API
以下方法和特征实现已稳定。
[T; N]::as_mut_slice
[T; N]::as_slice
collections::TryReserveError
HashMap::try_reserve
HashSet::try_reserve
String::try_reserve
String::try_reserve_exact
Vec::try_reserve
Vec::try_reserve_exact
VecDeque::try_reserve
VecDeque::try_reserve_exact
Iterator::map_while
iter::MapWhile
proc_macro::is_available
Command::get_program
Command::get_args
Command::get_envs
Command::get_current_dir
CommandArgs
CommandEnvs
以下先前稳定的函数现在是 const
。
其他更改
Rust 1.57.0 版本中还有其他更改:查看Rust、Cargo 和Clippy 中的更改。
1.57.0 的贡献者
许多人共同创建了 Rust 1.57.0。没有你们,我们无法做到。 感谢!