新关键字

Minimum Rust version: 1.27

总结

动机

用于特征对象的 dyn Trait

dyn 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!()
}
}

就是这样!

为什么?

仅使用特征名称作为特征对象被证明是一个糟糕的决定。当前的语法通常是模棱两可和令人困惑的,即使对于经验丰富的程序员也是如此,并且它偏向于一个并不比其替代方案更常用的功能,有时速度更慢,并且在其替代方案可以使用时通常根本无法使用。

此外,随着 impl Trait 的到来,“impl Traitdyn Trait” 比 “impl TraitTrait” 更对称,因此也更美观。impl Trait此处 有解释。

因此,在新版本中,当您需要特征对象时,您应该更喜欢 dyn Trait 而不是 Trait

asyncawait

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

try 关键字

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