第95章へようこそ。
今日のテーマは「型を消す抽象」です。
ジェネリクスは「どんな型でも受け入れる」仕組みでした。
しかしジェネリクスでは、コンパイル時にすべての型が確定します。
コンパイラは、使われる型ごとに専用のコードを生成する。
これが単相化、モノモーフィゼーションです。
では、コンパイル時に型が決まらない場合はどうするか。
設定ファイルの内容に応じて、異なる型のオブジェクトを返したい。
プラグインのように、実行時にどの型が来るか分からない状況を扱いたい。
ここで登場するのが、トレイトオブジェクトです。
トレイトオブジェクトは、具体的な型を消して、トレイトだけを残す。
「この値はDrawを実装している」という情報だけで値を扱う。
型の名前は消える。残るのは、能力の約束だけ。
これがdyn Traitです。