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)