struct Vec {
data: [f32; 3],
}
impl Vec {
fn dot(&self, other: &Vec) -> f32 {
..
}
// vs
fn dot(self, other: Vec) -> f32 {
..
}
}
我目前正在编写一个向量数学库,我想知道是应该借用还是复制我的向量类型。
目前,我为Vec实现了Copy,这使得API更加友好,因为你不必一直写&。
但它需要更复杂的约束,因为现在所有的约束都需要满足Copy。
哪一个潜在地产生更好的性能?为什么?
哪一个潜在地产生更好的人机交互体验?为什么?
编辑:
我创建了一个小型的microbenchmark。
test bref_f32 ... bench: 2,736,055 ns/iter (+/- 364,885)
test bref_f64 ... bench: 4,872,076 ns/iter (+/- 436,928)
test copy_f32 ... bench: 2,708,568 ns/iter (+/- 31,162)
test copy_f64 ... bench: 4,890,014 ns/iter (+/- 553,050)
就性能而言,对于这个例子,ref
和copy
之间似乎没有区别。
对于库用户来说,copy
似乎提供了更好的人机工程学。