Common Lisp 中 array/vector 类型之间的区别?
Difference between array/vector types in Common Lisp?
类型vector
、simple-vector
、array
和simple-array
有什么区别?
我知道向量是数组的子类型,不能是多维的。
"simple-" 版本似乎是类型,其余的 类。所以类型可能比较复杂,要指定类型。
我应该使用哪些类型说明符?指定向量的最佳方式是什么?
向量是一维数组。
如果它们没有位移,它们是simple,没有填充指针,和 不是 明确可调的 。简单向量还需要能够容纳任何类型的元素。
Which type-specifiers should I use?
我想这取决于你想做什么。
Rainer the positive 你问题的一部分。
normative 部分的答案如下:
Which type-specifiers should I use?
你应该不使用任何,除非你非常清楚自己在做什么。
Common Lisp 中的类型注释是可选的;它们供 专家 进行性能调整。您不太可能从类型声明中获得任何有意义的好处,而且您很可能会受到它们的伤害。例如,如果您的类型注释错误,您可能会收到段错误而不是错误消息(当与不安全代码结合使用时)。
此外,效果可能与预期相反。例如,使用专门的数组(例如 (array double-float)
)来减少内存占用可能会导致 增加 垃圾收集,因为每个数组访问都可能必须装箱一个新的 double-float
.
本质上,类型注释通常是微优化,应该伴随着仔细的分析。
类型vector
、simple-vector
、array
和simple-array
有什么区别?
我知道向量是数组的子类型,不能是多维的。
"simple-" 版本似乎是类型,其余的 类。所以类型可能比较复杂,要指定类型。
我应该使用哪些类型说明符?指定向量的最佳方式是什么?
向量是一维数组。
如果它们没有位移,它们是simple,没有填充指针,和 不是 明确可调的 。简单向量还需要能够容纳任何类型的元素。
Which type-specifiers should I use?
我想这取决于你想做什么。
Rainer
normative 部分的答案如下:
Which type-specifiers should I use?
你应该不使用任何,除非你非常清楚自己在做什么。
Common Lisp 中的类型注释是可选的;它们供 专家 进行性能调整。您不太可能从类型声明中获得任何有意义的好处,而且您很可能会受到它们的伤害。例如,如果您的类型注释错误,您可能会收到段错误而不是错误消息(当与不安全代码结合使用时)。
此外,效果可能与预期相反。例如,使用专门的数组(例如 (array double-float)
)来减少内存占用可能会导致 增加 垃圾收集,因为每个数组访问都可能必须装箱一个新的 double-float
.
本质上,类型注释通常是微优化,应该伴随着仔细的分析。