Ref, RefMut MatrixのPtrの実装を変更
Closed this issue · 2 comments
bokutotu commented
zenu/zenu-matrix/src/memory_impl.rs
Lines 108 to 126 in c261ef0
この実装の方が、borrow系のライフタイムをあまり気にしなくて良いので実装としては、いい気がする。
この実装の問題点としては、RefとRefMutがほぼ同じ実装になる可能性がある。
この実装のいいところとしては、以下のようなコードが書けるようになる。
let a: Option<Matrix<Owned<f32, DimDyn, Nvidia>> = ...;
let a_ref: Option<Matrix<Ref<f32>, DimDyn, Nvidia>> = a.map(|a|a.to_ref());
みたいなことができる。
今の実装だと、creates a temporary value which is freed while still in use
のエラーがでる。これは、'aのライフタイムが合わないから。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=96e7383dd368070c0197649ccc2acdf1
こんな感じできる
bokutotu commented
そっくりそのまま置き換えると大変なことになるので、一旦は、RefとView,ViewMutの構造体両方とも使用して、段階的にRefを廃止していく
bokutotu commented
ndarrayの実装をパクったけど、元の実装の方が良さそう...