2016-05-24 6 views
4

これらの方法は、動的ディスパッチを使用する(パラメータとして形質オブジェクト&Debugを受ける):なぜいくつかのstd :: fmt :: Debug *メソッドは動的ディスパッチを使用しますか?

これらの方法は、静的ディスパッチを使用して、関連entry方法の観点から書かれている:メソッドの最初のリストの代わりに、動的ディスパッチを使用しない理由

静的なディスパッチ?静的なディスパッチが使用された場合、その使用は制限されますか?

答えて

5

スタティックディスパッチは、単一化を使用します。これにより、コンクリートタイプごとに別々のコードが作成されます。

コンクリートタイプので使用される関数を使用すると、これらのバージョンをすべて作成して最適化するために、コンパイル時に大きなペナルティが発生することがあります。このような場合に単一形化が性能を上げない場合でも、これは起こります。

代わりにtrait objectを使用すると、コードの1つの実装(&Trait)が作成されます。


これらのメソッドは、RFC 640の一部として追加されましたが、discussionはこの点に言及していないようです。実際、彼らはoriginally implemented with static dispatchでした。唯一の後に彼らchanged to accept a trait objectた:

再編・デバッグ・ビルダーは

は、オブジェクトを形質に、一般的な境界からの切り替えと、私たちは気にするので、非インライン 内側の方法は、デバッグimplsのサイズを減らす必要があるたコード生成を最小限に抑えます デバッグ実装の速度は、バイナリ・ブートよりも遅くなります。

関連する問題