最近,Rust 1.58版本发布了,因为Rust新版本发布比较频繁,稳定版本大约每六周就会发布一次,所以每个版本的新特性不会太多。

如果你在以前已经通过rustup安装了Rust,可以通过下面的命令将Rust升级到1.58:

1
rustup update stable

Rust 1.58的主要新特性包括:

  • 在格式字符串中支持捕获的标识符
  • 对Windows上Command的搜索路径的更改
  • 标准库中更多的#[must_use]标注(annotations)
  • 一些新库的稳定性

格式化字符串中支持捕获的标识符

在Rust 1.58之前格式化字符串有以下三种方式:

1
2
3
4
5
6
7
fn main() {
    let person = "Rustaceans";
    let msg = "Cool Boy";
    println!("Hello, {}, {}!", person, msg); // 隐式位置
    println!("Hello, {0}, {1}! Hello, {0}, {1}!", person, msg); // 显式的索引
    println!("Hello, {person}, {msg}!", person = &person, msg = &msg); // 命名
}

Rust 1.58增加了在格式化字符串中直接捕获局部变量的标识符的支持,现在可以直接这么写了:

1
2
3
4
5
fn main() {
    let person = "Rustaceans";
    let msg = "Cool Boy";
    println!("Hello, {person}, {msg}!"); // 直接在格式化字符串中捕获局部变量person和msg
}

也可以用于格式化参数:

1
2
3
4
let (width, precision) = get_format();
for (name, score) in get_scores() {
  println!("{name}: {score:width$.precision$}");
}

需要注意格式字符串只能捕获普通标识符,不能捕获任意路径或表达式。 对于更复杂的参数,要么先将它们赋值给本地变量,要么使用1.58版本之前,命名格式参数的形式(name = expression)。

在格式化字符串中直接捕获标识符的特性,适用于所有接受格式字符串的宏。

Rust 1.58其他新特性的详细信息可以访问https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html

参考