编译器优化对定义Common (defstruct person (age nil :type (or null integer)))
vs (defstruct person (age -1 :type integer))
等Common Lisp结构(或类)的潜在影响是什么?我经常发现,使用第一种形式,使用表示特殊条件的空值非常方便;例如,如果一个人的年龄不知道。但在第二种形式中,您还可以使用ad-hoc指定的整数(如-1)来指示此情况。一个表示优于另一个表示是否存在优势/劣势? (ps:在这种情况下,差异可能可以忽略不计,但似乎可能不适用于涉及哈希表等复杂对象的嵌套结构。)
答案 0 :(得分:1)
我认为你问的是错误的问题。
“......计算机语言不仅仅是一种获取计算机的方式 执行操作,而是......它是一种新颖的正式媒介 表达关于方法论的想法“
Abelson / Sussman“计算机程序的结构和解释”。
您正在编写供人们阅读的代码,而不只是为了执行计算机。 设计的主要驱动因素应该是代码可读性而不是性能(特别是在您的情况下,性能影响最有可能忽略不计):
特别是在您的情况下,如果您只有一个特殊值,和该特殊值意味着“缺失”,您可能希望使用defclass
您可以在nil
中使用未绑定的广告位而不是defstruct
广告位值。
PS。不要误会我的意思 - 性能 DOES 很重要。但是,它在可伸缩性中很重要,而不是微优化。 IOW,优先级应该是