编译器优化结构或类定义

时间:2017-04-13 17:43:15

标签: class structure common-lisp compiler-optimization

编译器优化对定义Common (defstruct person (age nil :type (or null integer))) vs (defstruct person (age -1 :type integer))等Common Lisp结构(或类)的潜在影响是什么?我经常发现,使用第一种形式,使用表示特殊条件的空值非常方便;例如,如果一个人的年龄不知道。但在第二种形式中,您还可以使用ad-hoc指定的整数(如-1)来指示此情况。一个表示优于另一个表示是否存在优势/劣势? (ps:在这种情况下,差异可能可以忽略不计,但似乎可能不适用于涉及哈希表等复杂对象的嵌套结构。)

1 个答案:

答案 0 :(得分:1)

我认为你问的是错误的问题。

  

“......计算机语言不仅仅是一种获取计算机的方式   执行操作,而是......它是一种新颖的正式媒介   表达关于方法论的想法“

     

Abelson / Sussman“计算机程序的结构和解释”。

您正在编写供人们阅读的代码,而不只是为了执行计算机。 设计的主要驱动因素应该是代码可读性而不是性能(特别是在您的情况下,性能影响最有可能忽略不计):

  1. Is premature optimization really the root of all evil?
  2. When is optimisation premature?
  3. 特别是在您的情况下,如果您只有一个特殊值,该特殊值意味着“缺失”,您可能希望使用defclass您可以在nil中使用未绑定的广告位而不是defstruct广告位值。

    PS。不要误会我的意思 - 性能 DOES 很重要。但是,它在可伸缩性中很重要,而不是微优化。 IOW,优先级应该是

    • 可伸缩性(即,选择线性算法而不是二次算法)
    • 可读性/可维护性(代码结构,符号名称,注释等)
    • 微优化(例如,Lisp代码中的类型声明)