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