web-dev-qa-db-ja.com

なぜdyn構文が導入されたのですか?

Rust 1.27. では、新しい構文が導入されました-dynキーワードが追加されました。

  // old => new
  Box<Foo> => Box<dyn Foo>
  &Foo => &dyn Foo
  &mut Foo => &mut dyn Foo

それは実際に何をし、なぜ追加されたのですか?

23
Timon Post

これは、特性/特性オブジェクトと構造体を区別するのに役立ちます。 &FooBox<Foo>およびimpl Bar for Fooは曖昧でした。なぜならそれらのすべてでFooが特性または構造体であったかもしれないからです。

dynの追加により、これは曖昧ではなくなりました。特性はdynキーワードによって区別されるためです。

// trait objects (new dyn syntax)
&Foo     => &dyn Foo
&mut Foo => &mut dyn Foo
Box<Foo> => Box<dyn Foo>

// structs (no change)
&Bar
&mut Bar
Box<Bar>
32
ljedrz