第54章へようこそ。
今日のテーマは「UnsafeCell」です。
第23章で、内部可変性を見ました。
外側の値に不変参照しか持っていないのに、その内側の値を変更できる仕組み。
RefCellは、借用の検査を実行時に行うことで、それを安全な操作として提供していた。
だが、1つ確かめていないことがある。
借用規則は、不変参照の先を書き換えることを許さない。
そしてRefCell自身も、Rustで書かれた型だ。
同じ規則の下にあるはずのRustのコードが、不変参照の先を書き換えるという動作を、どこかで組み立てていることになる。
第52章で、安全な抽象の内側にはunsafeがあると見ました。
第53章では、その内側で使われる生ポインタを見た。
今日はその2つが実際に働いている場所を、内部可変性で確かめます。
Cell、RefCell、ミューテックス、アトミック型。
これらすべての内側に、たった1つの型がある。
それがUnsafeCellです。
今日扱うのは、不変参照が支えている前提、UnsafeCellがその前提をどう外すのか、安全な型がその上にどう立っているのか、そしてスレッドの境界で何が起きるのか、です。