unsafeの意味
unsafeは安全性を無視する印ではありません。コンパイラが通常保証する一部の規則について、プログラマが正しさを引き受ける範囲を明示します。生ポインタの参照外し、unsafe関数呼び出し、unsafe trait実装などが該当します。
安全な抽象化
unsafe操作は小さな範囲に閉じ込め、外側には安全なAPIを提供します。標準APIで実現できるならunsafeを導入しません。
fn first_or_zero(v:&[i32])->i32{v.first().copied().unwrap_or(0)}
fn main(){println!("{}",first_or_zero(&[4,8]));}
レビューではポインタの有効期間、アラインメント、初期化、エイリアス、スレッド間アクセスを確認し、「なぜ安全か」を記録します。
設計演習
unsafeブロックを含むライブラリについて、前提条件、不変条件、呼び出し側の条件、テスト方針を整理してください。