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为const contexts带来了panic! ,为Cargo增加了对自定义配置文件的支持,并稳定了易变的预订API。
panic! 在const contexts中
在以前的Rust版本中,panic! 这个宏在const fn 和其他编译时上下文中是不能使用的。现在,这一点已经稳定下来了。随着panic! 的稳定化,其他几个标准库的API现在也可以在const中使用,比如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稳定了try_reserve ,用于Vec,String,HashMap,HashSet, 和VecDeque 。这个API使调用者可以错误地分配这些类型的支持存储。
如果全局分配器失败,Rust通常会中止进程,这并不总是可取的。这个API提供了一种方法,可以在使用标准库集合时避免这种中止。然而,Rust并不保证返回的内存实际上是由内核分配的:例如,如果在Linux上启用了超额提交(overcommit),当试图使用时,内存可能是不可用的。
稳定的API
以下方法和特质的实现被稳定化:
[T; N]::as_mut_slice[T; N]::as_slicecollections::TryReserveErrorHashMap::try_reserveHashSet::try_reserveString::try_reserveString::try_reserve_exactVec::try_reserveVec::try_reserve_exactVecDeque::try_reserveVecDeque::try_reserve_exactIterator::map_whileiter::MapWhileproc_macro::is_availableCommand::get_programCommand::get_argsCommand::get_envsCommand::get_current_dirCommandArgsCommandEnvs
以下之前稳定的函数现在被const:
其他变化
Rust 1.57.0版本中还有其他变化:请查看Rust、Cargo和Clippy中的变化。
1.57.0的贡献者
许多人共同创造了Rust 1.57.0,没有你们,我们不可能做到这一点。谢谢你们