Section courante

A propos

Section administrative du site

dyn

Dynamique
Rust

Syntaxe

&dyn Trait
Box<dyn Trait>
Arc<dyn Trait>

Paramètres

Nom Description
&dyn Trait Ce paramètre permet de représenter une référence vers un objet trait dont le type exact est résolu dynamiquement à l'exécution (trait object).
Box<dyn Trait> Ce paramètre permet de représenter un pointeur intelligent Box vers un objet trait, permettant un stockage dynamique et une gestion de propriété.
Arc<dyn Trait> Ce paramètre permet de représenter un pointeur atomique de comptage partagé vers un objet trait, utile pour le partage thread-safe d'un trait object.

Description

Ce mot réservé permet d'effectuer un envoi dynamique vers un objet de trait.

Remarques

dyn est un préfixe du type d'un objet trait.

Le mot clef dyn permet de souligner que les appels aux méthodes du trait associé sont distribués dynamiquement. Pour utiliser le trait de cette manière, il doit être compatible dyn1.

Contrairement aux paramètres génériques ou au trait impl, le compilateur ne connaît pas le type concret transmis. Autrement dit, le type a été effacé. Ainsi, une référence à un trait dyn contient deux pointeurs. L'un pointe vers les données (par exemple, une instance d'une structure). L'autre pointe vers une table de méthodes virtuelles (ou vtable) reliant les noms d'appels de méthodes aux pointeurs de fonctions.

À l'exécution, lorsqu'une méthode doit être appelée sur le trait dyn, la vtable est consultée pour obtenir le pointeur de fonction, puis ce pointeur est appelé.

Compromis

L'indirection ci-dessus représente le coût d'exécution supplémentaire lié à l'appel d'une fonction sur un trait dyn. Les méthodes appelées par répartition dynamique ne peuvent généralement pas être intégrées en ligne par le compilateur.

Cependant, le trait dyn est susceptible de produire du code plus léger que le trait impl ou les paramètres génériques, car la méthode ne sera pas dupliquée pour chaque type concret.



Dernière mise à jour : Vendredi, le 1er Août 2025