Loading article…
コンピューティングにおいて、静的ディスパッチはコンパイル時に完全に解決されるポリモーフィズムの一形態です。これはメソッドディスパッチの一形態であり、言語または環境がメソッドまたは関数のどの実装を使用するかを選択する方法を記述します。[1]
例としては、C++ のテンプレート、Fortranやその他の言語でのジェネリックプログラミング、関数オーバーロード(演算子オーバーロードを含む)などがあります。コードはモノモーフィズム化されていると言われ、特定のデータ型が推測され、呼び出しグラフを通じてトレースされ、ジェネリック関数の特定のバージョンをインスタンス化し、提供された定義に基づいて特定の関数呼び出しを選択します。
これは、ランタイム情報 ( vtableポインターやその他の形式のランタイム型情報 など) に基づく動的ディスパッチとは対照的です。
静的ディスパッチが可能なのは、問題のメソッドの実装が常に 1 つだけであるという保証があるためです。静的ディスパッチは通常、本質的にオーバーヘッドが高い動的ディスパッチよりも高速です。
Rustの例
Rustで[2 ]
特性Speak { fn speaker ( & self ); }
構造体 Cat ;
CatのSpeakを実装します{ fn talk ( & self ) { println! ( "ニャー!" ); } }
fn talk < T : Speak > ( pet : T ) { pet .speak () ; }
fn main () { let pet = Cat ; talk ( pet ); }
Rust はこれをコンパイルすると次のように単態化します。
fn talk_cat ( pet : Cat ) { pet .speak () ; }
参照
参考文献
- ^ Clojureの要素。Lulu.com。2019年、p.68。ISBN 9780359360581. 2022年7月17日閲覧。
- ^ 「ジェネリックデータ型 - Rust プログラミング言語」. doc.rust-lang.org .
- https://developer.apple.com/swift/blog/?id=27
