Common Lisp 中 array/vector 类型之间的区别?

Difference between array/vector types in Common Lisp?

类型vectorsimple-vectorarraysimple-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 .

本质上,类型注释通常是微优化,应该伴随着仔细的分析。