(defstruct person (age nil :type (or null integer)))
と(defstruct person (age -1 :type integer))
のようなCommon Lisp構造体(またはクラス)を定義するコンパイラ最適化への潜在的な影響はありますか?私はしばしば、最初の形式を使用して、特別な条件を示すヌル値を持つことが便利であることがわかります。例えば、人の年齢がわからない場合。しかし、2番目の形式では、-1のような特別な指定整数を使用してこの状態を示すこともできます。ある表現に対して他の表現に利点/不利な点がありますか? (ps:この場合、その差はごくわずかですが、ハッシュテーブルなどの複雑なオブジェクトを含むネストされた構造ではないようです)構造体またはクラス定義のコンパイラの最適化
答えて
間違った質問をしていると思います。
「...コンピュータ言語は にコンピュータを取得するだけの方法ではありません、それは方法論について 表現のアイデアのための新規の正式な媒体である...操作を実行するのではなく、」
アベルソン/ Sussman「コンピュータプログラムの構造と解釈」
コンピュータを実行するだけでなく、読めるようにするコードを書いています。 デザインするための主要なドライバは、コードの可読性ではなく、性能でなければなりません(あなたのケースであるように、パフォーマンスへの影響は無視できることが最も可能性が高い場合は特に、):
特別な値のとの場合は、特別値が「不足」を意味する場合は、defclass
を使用することをお勧めします。 nil
スロット値の代わりにアンバウンドスロットをdefstruct
に設定してください。
PS。私を間違えないでください - パフォーマンスは問題です。ただし、スケーラビリティでは重要であり、マイクロ最適化ではありません。 IOW、優先度(すなわち、代わりに二次アルゴリズムのlinearithmic選択)
- スケーラビリティであるべきです例えばLispコードの型宣言)
最適化と表現の情報には、参考文献と(https://groups.google.com/forum/#!topic/comp.lang.lisp/fpEC_WubwGE)(https:// groups.google.com/forum/#!topic/comp.lang.lisp/ZOgTMwm3gD4)]と入力します。思考のための多くの食糧、感謝。 – davypough
- 1. 最適なC構造体定義
- 2. LLVM構造体リターンの最適化
- 3. 構造体/クラス定義のプライベートセクションswift 3
- 4. コンパイラは、固定サイズの配列を持つ構造体を返す関数を最適化しますか?
- 5. Javaコントロール構造の自動コンパイラ最適化?
- 6. ツールチェーンの最適化構造
- 7. C構造体、構造体へのポインタ、適切な初期化
- 8. 構造体の再定義
- 9. Cの構造体定義
- 10. .NETのラッパータイプ:構造体またはクラス?
- 11. Python最適化データ構造
- 12. ユーザ定義構造体
- 13. Golang構造体定義パターン
- 14. 未定義変数とコンパイラの最適化
- 15. ユーザー定義の構造体へのスマートポインタのメンバ初期化リスト
- 16. コンパイラで構造体の関数呼び出しを最適化できますか?
- 17. の設定コンパイラの最適化オプション
- 18. ヒープソープのヒープ構造の最適化
- 19. ゴーランのデータ構造/ワードアライメントパディングの最適化
- 20. グローバル構造体を定義するグローバル構造体
- 21. Cの構造体定義のバリエーション
- 22. Vector2:クラスまたは構造体?
- 23. 構造体定義のマクロを定義しています
- 24. 4状態データ構造の最適化
- 25. 「クラス名」この単純なクラスを見て、以前に定義されたクラスまたは構造体
- 26. ユーザー定義の構造体ポインタ{}をユーザー定義の構造体ポインタにアンマーシャリングします。
- 27. 定義スウィフトマックで構造体のApp
- 28. 正しい構造体の定義
- 29. Golang:構造体エラーの未定義フィールド
- 30. std :: hashテンプレート構造体の再定義
コンパイラの最適化への影響?知るか?これは、ランタイム、コンパイラ、コンパイラ設定、プログラムなどによって異なります。CLOSを使用する場合は、スロットがアンバウンドできるため、年齢がわからないことがあります。 –