所以......我vector
现在最好使用未装箱的向量(来自包装),而没有给予太多考虑。vector-th-unbox
为它们创建实例变得轻而易举,为什么不呢。
现在我遇到了一个实例,我无法自动派生这些实例,这是一种带有幻像类型参数的数据类型(如Vector (s :: Nat) a
,其中s
编码长度)。
这让我想到了Storable
和Unboxed
向量之间的区别。我自己想出来的事情:
Unboxed
将例如元组存储为单独的向量,从而在只需要其中一个值时不浪费带宽,从而导致更好的缓存局部性。Storable
仍将被编译为readArray#
返回未装箱值的简单(并且可能是有效的)s(如阅读核心所示)。Storable
允许直接指针访问,这允许与外部代码的互操作性。Unboxed
没有。- [编辑]实例实际上比(即和)
Storable
更容易手写。Unbox
Vector
MVector
仅这一点并不能让我明白为什么Unboxed
甚至存在,它似乎没有什么好处。可能我在那里遗漏了什么?