Expand description
dyn
is a prefix of a trait object’s type.
The dyn
keyword is used to highlight that calls to methods on the associated Trait
are dynamically dispatched. To use the trait this way, it must be ‘object safe’.
Unlike generic parameters or impl Trait
, the compiler does not know the concrete type that
is being passed. That is, the type has been erased.
As such, a dyn Trait
reference contains two pointers.
One pointer goes to the data (e.g., an instance of a struct).
Another pointer goes to a map of method call names to function pointers
(known as a virtual method table or vtable).
At run-time, when a method needs to be called on the dyn Trait
, the vtable is consulted to get
the function pointer and then that function pointer is called.
See the Reference for more information on trait objects and object safety.
§Trade-offs
The above indirection is the additional runtime cost of calling a function on a dyn Trait
.
Methods called by dynamic dispatch generally cannot be inlined by the compiler.
However, dyn Trait
is likely to produce smaller code than impl Trait
/ generic parameters as
the method won’t be duplicated for each concrete type.