web-dev-qa-db-fra.com

Pourquoi la syntaxe Dyn a-t-elle été introduite?

Dans Rust 1.27. une nouvelle syntaxe est introduite - le mot clé dyn a été ajouté.

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

Que fait-il réellement et pourquoi a-t-il été ajouté?

23
Timon Post

Cela permet de différencier les traits/objets de traits et les structures; &Foo, Box<Foo> et impl Bar for Foo étaient ambigus, car dans chacun d'eux Foo aurait pu être un trait ou une structure.

Avec l'ajout de dyn, cela n'est plus ambigu, car les traits sont distingués par le mot clé 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