Rust のライブラリを使う側としても作る側としても困ることの一つに、長期間保持する参照の扱いがある。
ライブラリがユーザーの持つデータへの参照を保持したいとする。そのデータの寿命はユーザー側が管理している。このとき、 C++ であれば生ポインタないし参照で保持しておけばいい。 Rust の &T
は当然ながら静的に寿命が分かっていないといけないし、 self-referential structs も使えない。一般には Rc
なり Arc
なりを使うことになるが、どうやってデータを保持するのが適切かは、本来ユーザー側の使い方で決まる。静的に寿命が分かっているときもあれば、ライブラリ側では弱参照で保持して欲しいときもある。
原理的な問題を別にしても、 Weak<RefCell<T>>
に対していちいち obj.upgrade().unwrap().borrow_mut()
とか書くのは辛い。
Backlinks: [202404800]
.