IT用語集 › プログラミング › トレイトオブジェクト

トレイトオブジェクト

プログラミング Svenska → 更新: 2026-10-22

仮想テーブルによる動的ディスパッチを実現するRustの機能。Box<dyn Trait> や &dyn Trait の形で使う。コンパイル時の単相化ではなく実行時ポリモーフィズムとなり、柔軟性が増す代わりに実行時コストがわずかにかかる。

vtableの参照は1回のメソッド呼び出しで約5ns。インライン化された静的ディスパッチの約0nsと比べても、多くの場合は無視できる。トレイトオブジェクトを使う場面は、異なる型を混在させるコレクション(Vec<Box<dyn Trait>>)、プラグインアーキテクチャ、関数から異なる具象型を返したい場合などだ。オブジェクト安全性の規則として、トレイトがオブジェクトになれるのは、すべてのメソッドがディスパッチ可能な場合に限る(Selfの値渡しやジェネリックなメソッド引数は不可)。Rust 1.27以降は dyn キーワードが必須となった(旧来の「&Trait」構文は廃止)。他言語での対応物は、JavaのインターフェースとGoのインターフェースで、どちらも常に仮想呼び出しだ。トレイトオブジェクトと単相化は補い合う手法なので、必要に応じて選ぶ。

← 用語集に戻る