2017-04-13 17 views
0

(defstruct person (age nil :type (or null integer)))(defstruct person (age -1 :type integer))のようなCommon Lisp構造体(またはクラス)を定義するコンパイラ最適化への潜在的な影響はありますか?私はしばしば、最初の形式を使用して、特別な条件を示すヌル値を持つことが便利であることがわかります。例えば、人の年齢がわからない場合。しかし、2番目の形式では、-1のような特別な指定整数を使用してこの状態を示すこともできます。ある表現に対して他の表現に利点/不利な点がありますか? (ps:この場合、その差はごくわずかですが、ハッシュテーブルなどの複雑なオブジェクトを含むネストされた構造ではないようです)構造体またはクラス定義のコンパイラの最適化

+1

コンパイラの最適化への影響?知るか?これは、ランタイム、コンパイラ、コンパイラ設定、プログラムなどによって異なります。CLOSを使用する場合は、スロットがアンバウンドできるため、年齢がわからないことがあります。 –

答えて

1

間違った質問をしていると思います。

「...コンピュータ言語は にコンピュータを取得するだけの方法ではありません、それは方法論について 表現のアイデアのための新規の正式な媒体である...操作を実行するのではなく、」

アベルソン/ Sussman「コンピュータプログラムの構造と解釈」

コンピュータを実行するだけでなく、読めるようにするコードを書いています。 デザインするための主要なドライバは、コードの可読性ではなく、性能でなければなりません(あなたのケースであるように、パフォーマンスへの影響は無視できることが最も可能性が高い場合は特に、):

  1. Is premature optimization really the root of all evil?
  2. When is optimisation premature?

特別な値のの場合は、特別値が「不足」を意味する場合は、defclassを使用することをお勧めします。 nilスロット値の代わりにアンバウンドスロットをdefstructに設定してください。

PS。私を間違えないでください - パフォーマンス問題です。ただし、スケーラビリティでは重要であり、マイクロ最適化ではありません。 IOW、優先度(すなわち、代わりに二次アルゴリズムのlinearithmic選択)

  • 可読性/保守(コード構造、シンボル名、コメント、およびこのような)
  • マイクロ最適化(

    • スケーラビリティであるべきです例えばLispコードの型宣言)
  • +0

    最適化と表現の情報には、参考文献と(https://groups.google.com/forum/#!topic/comp.lang.lisp/fpEC_WubwGE)(https:// groups.google.com/forum/#!topic/comp.lang.lisp/ZOgTMwm3gD4)]と入力します。思考のための多くの食糧、感謝。 – davypough

    関連する問題