← Rust

LESSON / ARTICLE

unsafe Rustと安全性の境界

unsafe Rustと安全性の境界を学び、実務での設計判断につなげます。

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ブロックを含むライブラリについて、前提条件、不変条件、呼び出し側の条件、テスト方針を整理してください。