← Rust コース
55. unsafe — コンパイラの保証を一部外す
unsafe ブロックの中では、生ポインタの参照外しなど、コンパイラが安全性を保証できない数種類の操作が許可されます。&num as *const i32 のように生ポインタを「作る」だけなら通常のコードで書けて、「参照外し」だけが unsafe ブロックを必要とします。
実務で unsafe を自分で書くことはほぼありません。OS や C ライブラリとのやり取り、Vec のような標準ライブラリの内部実装など、「安全な部品」を提供するライブラリの内側に閉じ込めるための機能です。私たちは普段、その上に作られた安全な API の恩恵だけを受けています。
unsafe は検査をすべて無効にするわけではなく、所有権や借用のチェックは引き続き働きます。追加で許可される操作の正しさの責任が、コンパイラからプログラマに移る、という意味だと理解してください。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Rust
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗