Rust 1.58已经发布, 这些新特性需要我们关注
2022-01-14
最近,Rust 1.58版本发布了,因为Rust新版本发布比较频繁,稳定版本大约每六周就会发布一次,所以每个版本的新特性不会太多。
如果你在以前已经通过rustup安装了Rust,可以通过下面的命令将Rust升级到1.58:
1rustup update stable
Rust 1.58的主要新特性包括:
- 在格式字符串中支持捕获的标识符
- 对Windows上
Command
的搜索路径的更改 - 标准库中更多的
#[must_use]
标注(annotations) - 一些新库的稳定性
格式化字符串中支持捕获的标识符 #
在Rust 1.58之前格式化字符串有以下三种方式:
1fn main() {
2 let person = "Rustaceans";
3 let msg = "Cool Boy";
4 println!("Hello, {}, {}!", person, msg); // 隐式位置
5 println!("Hello, {0}, {1}! Hello, {0}, {1}!", person, msg); // 显式的索引
6 println!("Hello, {person}, {msg}!", person = &person, msg = &msg); // 命名
7}
Rust 1.58增加了在格式化字符串中直接捕获局部变量的标识符的支持,现在可以直接这么写了:
1fn main() {
2 let person = "Rustaceans";
3 let msg = "Cool Boy";
4 println!("Hello, {person}, {msg}!"); // 直接在格式化字符串中捕获局部变量person和msg
5}
也可以用于格式化参数:
1let (width, precision) = get_format();
2for (name, score) in get_scores() {
3 println!("{name}: {score:width$.precision$}");
4}
需要注意格式字符串只能捕获普通标识符,不能捕获任意路径或表达式。
对于更复杂的参数,要么先将它们赋值给本地变量,要么使用1.58版本之前,命名格式参数的形式(name = expression
)。
在格式化字符串中直接捕获标识符的特性,适用于所有接受格式字符串的宏。
Rust 1.58其他新特性的详细信息可以访问https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html。