1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2017年12月23日 |
---|
#21 in #usize
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优化提供了有用的空间。