2016-04-17 4 views
5

クラスfinalを明示的に宣言し、privateのものにそのような増減の注釈が付いていることを確認しますか?ダイナミックディスパッチを減らしてランタイムに与える影響を理解しています。Swift Compile Times - `final`キーワードはコンパイル時間を増減する必要がありますか?

私はこれを中規模のプロジェクトで試してみました(Xcodeのデフォルトでコンパイル時間を表示するようにしました)。コンパイル時間が驚くほど(8秒ごとに)増えました。すべてのコードがサブクラスを排除するヒントとともにどのように適合するかを理解するのは簡単ではないでしょうか?

+0

なぜ 'final'がコンパイル時間を増やすべきか注意してください。 'final'では、それがない場合よりも合法的なものが少なくなるので、' final'が違法とするコードが存在しないことをコンパイラが確認しなければなりません。 'private'はオートコンプリートを速くしますが、コンパイル時に大きな影響を与えるべきではありません。 – BallpointBen

+2

これは重複としてフラグが付けられた理由はわかりません。参照される質問は、コンパイラのパフォーマンスに関心があるのに対し、実行時のパフォーマンスの利点は認識していないようです。私がリンクされた答えから引き出すことができる有用なビットは、 "コンパイラが動的ディスパッチインダイレクションを安全に無効にすることを許可します"ですが、コンパイル時の増減を正確に示すものではありません。 – edelaney05

+2

私は同意する、これは重複のように見えない。再開する必要があります。 – BallpointBen

答えて

-4

キーワードfinal私の理解が正しい場合は、変数の変更を許可せずに定数にします。コンパイラがコンパイル時に実行できる最適化の回数を減らす必要があります。これにより、プログラムのコンパイルに要する時間が短縮されます。

+2

いいえ、 'final'はクラスのサブクラス化を防ぎます。 – BallpointBen

関連する問題