Lessico IT › Programmazione › Trait object

Trait object

Programmazione Svenska → Aggiornato: 2026-10-05

Il modo di Rust di fare dispatch dinamico: dyn Trait nasconde il tipo concreto e cerca il metodo in una vtable a runtime.

Il codice generico in Rust viene normalmente monomorfizzato: il compilatore produce una copia separata per ogni tipo concreto, ottenendo chiamate dirette ma binari più grandi. A volte non è possibile: un vettore destinato a contenere forme di tipi diversi non può avere un unico tipo concreto per gli elementi. Qui entra in gioco Box<dyn Draw>, con ogni valore rappresentato da una coppia di puntatori — uno ai dati, uno alla tabella delle implementazioni dei metodi di quel tipo. La chiamata diventa indiretta e non può essere inlined, ma il codice esiste in una sola copia. Non ogni trait è ammesso: le regole di object safety escludono tra l'altro i metodi generici, perché una vtable non può essere riempita con infinite varianti.

← Torna al lessico