これらの方法は、動的ディスパッチを使用する(パラメータとして形質オブジェクト&Debug
を受ける):なぜいくつかのstd :: fmt :: Debug *メソッドは動的ディスパッチを使用しますか?
これらの方法は、静的ディスパッチを使用して、関連entry
方法の観点から書かれている:メソッドの最初のリストの代わりに、動的ディスパッチを使用しない理由
静的なディスパッチ?静的なディスパッチが使用された場合、その使用は制限されますか?
これらの方法は、動的ディスパッチを使用する(パラメータとして形質オブジェクト&Debug
を受ける):なぜいくつかのstd :: fmt :: Debug *メソッドは動的ディスパッチを使用しますか?
これらの方法は、静的ディスパッチを使用して、関連entry
方法の観点から書かれている:メソッドの最初のリストの代わりに、動的ディスパッチを使用しない理由
静的なディスパッチ?静的なディスパッチが使用された場合、その使用は制限されますか?
スタティックディスパッチは、単一化を使用します。これにより、コンクリートタイプごとに別々のコードが作成されます。
コンクリートタイプので使用される関数を使用すると、これらのバージョンをすべて作成して最適化するために、コンパイル時に大きなペナルティが発生することがあります。このような場合に単一形化が性能を上げない場合でも、これは起こります。
代わりにtrait objectを使用すると、コードの1つの実装(&Trait
)が作成されます。
これらのメソッドは、RFC 640の一部として追加されましたが、discussionはこの点に言及していないようです。実際、彼らはoriginally implemented with static dispatchでした。唯一の後に彼らchanged to accept a trait objectた:
再編・デバッグ・ビルダーは
は、オブジェクトを形質に、一般的な境界からの切り替えと、私たちは気にするので、非インライン 内側の方法は、デバッグimplsのサイズを減らす必要があるたコード生成を最小限に抑えます デバッグ実装の速度は、バイナリ・ブートよりも遅くなります。