2017-04-13 65 views
0

對於定義像(defstruct person (age nil :type (or null integer)))(defstruct person (age -1 :type integer))這樣的Common Lisp結構(或類),編譯器優化的潛在影響是什麼?我經常發現使用第一種形式表示方便的空值表示特殊條件;例如,如果一個人的年齡不知道。但在第二種形式中,您也可以使用特定的指定整數(如-1)來指示此情況。一種表示相對於另一種表示存在優勢/劣勢? (ps:在這種情況下,差異可能可以忽略不計,但似乎它可能不適用於涉及像哈希表等複雜對象的嵌套結構)。結構或類定義的編譯器優化

+1

對編譯器優化的影響?誰知道?這取決於運行時,編譯器,編譯器設置,程序......如果您使用CLOS,則槽可以解除綁定,這可能表明該時間未知。 –

回答

1

我認爲你問的是錯誤的問題。

「......一個計算機語言是沒有得到計算機 執行操作的只是一種方法,而是......它是 表達對方法論思想的小說正式媒體」

阿伯爾森/蘇斯曼「計算機程序的結構和解釋」。

您正在編寫供人閱讀的代碼,而不僅僅是供計算機執行。 爲您設計的主要驅動力應該是代碼的可讀性,而不是性能(尤其是時候,因爲在你的情況下,對性能的影響是最容易被忽略不計):

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

特別是在你的情況下,如果你只有一個特殊值,那特殊值意味着「缺失」,你可能想用defclass你的c在defstruct中有一個未綁定的槽位,而不是nil槽位值。

PS。不要誤會我的意思 - 性能DOES事。然而,它在可擴展性,而不是微優化。督察的重點應是

  • 可擴展性(即,選擇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