コンパイラの最終的なクラスの利点はありますか?クラスが最終的なものと非最終的なものであれば、最適化は行われますか? ライブラリコードでfinal宣言されたクラスがたくさんあるので、不思議です。最終クラスと非最終コンパイラの最適化
答えて
最初に最も重要なことを外に出しましょう:クラスを作ることfinal
は、、主にです。プログラマーによってモデリングが決定されました。 final
と非final
クラスは異なるセマンティクスを持っているため、パフォーマンス上の理由からfinal
を単に適用することはできません。
特にの場合は、final
のプロパティと不変量を保証できますか?クラスがではなく、final
である場合、サブクラスは、プロパティと不変量を破るような方法でメソッドをオーバーライドすることができます。
最も明白な例は、不変型を記述したい場合です。サブクラスがメソッドを変更可能なバージョンで単純にオーバーライドできる場合は、型が不変であるという保証はありません。不変の場合、はとなる必要があります。final
です。
Scala標準ライブラリ、Scalaプラットフォーム、およびより広範なScalaエコシステムとコミュニティには、多くの不変型があるため、多くのfinal
クラスも存在します。
したがって、繰り返す:クラスfinal
はセマンティック意思決定であり、それは最適化とは関係ありません。あなたは一般的にfinal
かどうか、それはどちらかfinal
にする必要があり、その不変量を維持するために、あなたのクラスを作るの選択肢を持っていない、またはそれが、その場合には、それははfinal
をすることはできません、基底クラスになるように設計されて。
コンパイラの最適化についての質問:はい、コンパイラには利点があります。実際にはfinal
クラスほどではありませんが、約final
メソッドです。この時点でメソッドをオーバーライドできないことをコンパイラが証明しなければならない最適化がいくつかあります。一般に、これはHalting Problemを解決することと等価ですが、final
メソッドの場合、これは事実です。たとえば、いつでもfinal
メソッドへの呼び出しをインラインで行うことができます。 Scala Reference manualによれば
:
最終修飾子は、クラスメンバの定義およびクラス 定義に適用されます。最終的なクラスメンバー定義は、サブクラス でオーバーライドできません。最終クラスはテンプレートによって継承されないかもしれません。 finalはオブジェクト定義のために冗長で です。最終クラスまたはオブジェクトのメンバー も暗黙的にfinalであるため、final修飾子は一般的に も冗長です。ただし、定数値 の定義(§4.1)は、 が最終クラスまたはオブジェクトで定義されていても、明示的な最終修飾子を必要とすることに注意してください。 finalは の不完全なメンバーには適用されず、封印された1つの修飾子リスト には結合できません。
コンパイラでは、パフォーマンスや利点の大幅な改善はなく、言語の制約の一部に過ぎません。
- 1. 最終クラスの非最終メソッド
- 2. 最終キーワードの最適化
- 3. CSSのコンパイラの最適化
- 4. コンストラクタのコンパイラの最適化
- 5. C++コンパイラの最適化
- 6. グラム++コンパイラの最適化
- 7. コンパイラ述語の最適化
- 8. GNUコンパイラの最適化
- 9. Javaコンパイラの最適化
- 10. Visual C++コンパイラの最適化
- 11. Erlangコンパイラの最適化
- 12. CGLIBプロキシ(最終クラス)
- 13. iPhoneのコンパイラの最適化とUIViewフレーム
- 14. コンパイラの動的最適化とは
- 15. GNU GCCコンパイラの最適化とデバッグ
- 16. スカラ暗黙の最終クラス
- 17. JukitoRunner、最終クラスのモックバインド
- 18. インナークラス非最終変数java
- 19. 最終とメモリリーク
- 20. GCCコンパイラ最適化機能インライン化
- 21. スウィフトの最終クラスと関数
- 22. 最終クラスのメソッドは、デフォルトで関数最適化へのポインタに適用されますか?
- 23. System.outと最終オブジェクトのインライン化
- 24. SQL最適化最適化?
- 25. コンパイラ最適化オプションの "デッドコードストリッピング"の概念
- 26. case文のコンパイラの最適化
- 27. の設定コンパイラの最適化オプション
- 28. Javaコンパイラは静的最終文字列を最適化しません。どうして?
- 29. 仮想関数コンパイラの最適化C++
- 30. サブレンジタイプによるコンパイラの最適化