トレイトオブジェクト
Rustにおける動的ディスパッチの方法。dyn Traitは具体的な型を隠し、実行時にvtableからメソッドを引く。
Rustのジェネリックコードは通常、単相化される。コンパイラが具体的な型ごとにコピーを生成するので呼び出しは直接になるが、バイナリは大きくなる。それが使えない場面もある。たとえば複数種類の図形を入れるベクタは、要素の具体型を1つに決められない。そこでBox<dyn Draw>の出番となり、各値はデータへのポインタとその型のメソッド実装表へのポインタの組で表される。呼び出しは間接的になりインライン化もできないが、コードは1つだけで済む。すべてのトレイトが対象になるわけではない。vtableは無限の種類で埋められないので、オブジェクト安全性の規則によりジェネリックメソッドなどは除外される。