2017-04-13 33 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