導入 cellモジュールにはCell, RefCell, UnsafeCellの三種類の構造体が定義されています。それらの違いを内部実装に軽く触れつつ解説したいと思います。 詳しい解説が不要な方は「cellモジュール」と「使い分け」をお読みください。 借用ルール Rustの借用ルールについて復習しておきましょう。 Rustは参照に関して、可変な参照が唯一つ存在するか、不変な参照が一つ以上存在するかしか認めていません。もしこのルールがなければ以下のようなコードが通ることになります。 let mut v = vec![0, 1, 2]; let s = &v[1..]; // ここでvを借用した v.pop(); // 既に借用されているvを可変に借用するので本当ならコンパイルエラー println!("{}", s[1]); // 既にポップされた無効な値への参照を使用としている このように