新关键字

Minimum Rust version: 1.27

摘要

动机

用于 trait 对象的 dyn Trait

dyn Trait 特性是使用 trait 对象的新语法。简而言之

  • Box<Trait> 变为 Box<dyn Trait>
  • &Trait&mut Trait 变为 &dyn Trait&mut dyn Trait

等等。在代码中

#![allow(unused)]
fn main() {
trait Trait {}

impl Trait for i32 {}

// old
fn function1() -> Box<Trait> {
unimplemented!()
}

// new
fn function2() -> Box<dyn Trait> {
unimplemented!()
}
}

就是这样!

为什么?

仅使用 trait 名称作为 trait 对象被证明是一个糟糕的决定。当前的语法通常含糊不清且令人困惑,即使对于老手也是如此,并且倾向于一个不如其替代方案更常用的功能,有时速度较慢,并且当其替代方案可以使用时,通常根本无法使用。

此外,随着 impl Trait 的出现,“impl Trait vs dyn Trait” 比 “impl Trait vs Trait” 对称得多,因此更好一些。impl Trait这里解释。

在新版本中,因此您应该在需要 trait 对象的地方优先使用 dyn Trait 而不是仅仅使用 Trait

asyncawait

这些关键字被保留用于实现 Rust 的 async-await 功能,该功能最终在 1.39.0 版本中发布并稳定

try 关键字

try 关键字被保留用于 try 块中,该块尚未(在撰写本文时)稳定(跟踪问题