struct Vec {
data: [f32; 3],
}
impl Vec {
fn dot(&self, other: &Vec) -> f32 {
..
}
// vs
fn dot(self, other: Vec) -> f32 {
..
}
}
我目前正在寫矢量數學庫,我想知道是否應該借用或複製我的矢量類型。我應該借用還是複製我的小數據類型?
目前我執行Copy
的Vec
這使得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
似乎爲圖書館用戶提供了更好的人體工程學設計。
你確定你想問一下「慣用」而不是「表演」或「簡化界限」嗎?因爲成語非常*主觀*,我恐怕可以推薦兩種選擇,並且不存在明確的客觀答案......在這種情況下,您的問題已經準備好關閉(主要基於意見)。 –
@MatthieuM。我認爲有一些關於習慣Rust代碼應該是什麼樣的指南,我重新提出了這個問題並添加了一個例子。 –