时隔 6 周,Rust 1.57.0 stable 她来了,新特性一览:
const 上下文支持 panic!
早期版本的 Rust,panic! 宏不能在 const fn
或其它运行时上下文中。这个版本他稳定可用了。
和 panic!
一起还有一些其它标准库 API 也能在 const 中使用了,如 assert!
。
panic!
宏当前版本还不支持完整的格式化,必须用一个静态字符串调用(panic!("")
),
或使用带 {}
(不能使用格式说明或其它特征)的 &str
类型插值。
未来相关功能会有更多支持,但就目前这个最小稳定版已经可以使用编译时断言了,如验证类型大小:
Cargo 支持自定义配置文件
Cargo 长期以来只支持四种配置文件: dev
、release
、test
和 bench
。现在 1.57 版本
支持任意命名的配置文件。
例如,如果你只想在最终产品构建时启用链接时间优化(LTO),可以在 Cargo.toml
添加如下配置
当选择这个配置文件时就可以启用 lto
参数,从而避免了在常规编译时启用它。
请注意,自定义配置文件必须指定他们要从中继承默认参数的配置文件。自定义配置定义好了之后,
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::getProgram
Command::get_args
Command::get_envs
Command::get_current_dir
CommandArs
CommandArgs
CommandEnvs
下面是之前稳定的函数现在是 const
:
hint::unreachable_unchecked
其它改动
在 1.57 还有些其它改动,具体查看相关改动日志 Rust、Cargo 和 Clippy
1.57.0 的贡献者
有很多人参与了创建 Rust 1.57.0。感谢你们。