#indices #index #signed #typed #64-bit #array #usize

nightly vecgenericindex

支持泛型/自定义索引的Vec包装器,例如比usize小的类型、有符号类型或强类型索引

1个不稳定版本

使用旧的Rust 2015

0.1.0 2017年12月23日

#21 in #usize

MIT许可证

20KB
485

目标

  • [1]在Rust 64位构建中使用32位(或更少)位索引更加方便(目前需要连续手动转换);
  • 避免有符号与无符号之间的摩擦(索引通常需要与有符号值交互,例如卷积中的偏移等)
  • 允许强类型索引,例如区分Index32、Index32等,以在编译时对索引数据的正确使用进行更多检查。

存在硬件向量化的32位索引支持,并且在16GB的机器上,普遍的64位索引是多余的:2^30 * 16字节对象将填满内存,而32位模式是不够的;

大多数应用程序永远不会用单个数组填满内存。

图形应用程序通常处理显式大小,例如使用GPU内存的知识、渲染的最佳块大小等。通常将场景聚类/细分到每个元素的特定最大值,从而有机会在索引和块内的空间精度方面利用位减少。

方法:-

  • 'Vec'被包裹在Array
  • 存在一个IndexTrait,必须为可索引类型实现,它必须提供与usize之间的转换,以便与底层的Rust向量实现进行互操作
  • 存在小的'Array2,Array3, Array4'类型,用于替换[T;2],[T;3],[T;4],并提供类似的支持(WIP)

未解决的问题:-

  • 对于切片,还没有解决方案(TODO!)
  • 关于.num()适配器的问题,它非常有用且重要,对于索引推理至关重要;也许我们必须实现一个类似的功能来处理这个问题。

可能的未来工作:最好重新实现Vec本身,带有自定义的Length、Capacity字段,例如,32位索引向量/64位构建将占用16字节的结构而不是24字节。这是一个较低优先级的问题,并且更大的vec可能为后续的SmallVec优化提供了有用的空间。

没有运行时依赖