5 个版本
0.1.0 | 2019 年 11 月 12 日 |
---|---|
0.0.0-alpha.3 | 2019 年 10 月 27 日 |
0.0.0-alpha.1 | 2019 年 10 月 25 日 |
#1225 在 游戏开发
23KB
516 行
权威
为 Rust 提供的权威向量与矩阵库
use definitive::Vector;
let a = Vector::new([2, 3, 1]);
let b = Vector::new([8, 0, 0]);
let c = a + b * (b * 2);
SIMD
Definitive
提供默认功能 simd
,该功能可启用和禁用某些 Vector
和 Matrix
变体的手写 SIMD 实现。手动优化的变体在各自的特性中有所说明
#![no_std]
此 crate 支持使用 #![no_std]
环境的 no_std
,可以通过禁用 std
功能来启用支持
当前问题
目前最大的问题是支持任意矩阵,因为不允许如下类型的类型签名。据我所知,我们可能 有一天 会得到这个功能,但 const 泛型仍然处于起步阶段。
struct Matrix<T, const N: usize, const L: [usize; {N}]>([T; { L.iter().product() }]);
我面临的另一问题是关于特殊化。我希望允许 vec * scalar
操作,但我无论如何也想不出不添加不必要的 Copy
约束在 vec
's T
上的方法。这在大多数情况下不是问题,并且不会引起任何效率问题,因为 vec
的成员实际上并没有被复制到任何地方。在未来,这个约束可能会被移除,因为我学会了如何真正使用类型系统 D
进展
-
向量
-
克隆
-
复制
-
调试
-
显示
-
等价
-
部分等价
-
-
加
-
加赋值
-
-
减
-
减赋值
-
-
乘
-
乘赋值
-
-
除
-
除赋值
-
-
取余
-
取余赋值
-
-
负
-
位与
-
位与赋值
-
-
位或
-
位或赋值
-
-
位异或
-
位异或赋值
-
-
左移
-
左移赋值
-
-
右移
-
右移赋值
-
-
非
-
哈希
-
-
Matrix
(阻塞在 https://github.com/rust-lang/rust/issues/44580)