事前条件を特定する
安全性の事前条件はどこで見つけますか?
// Copyright 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0
fn main() {
let b: *mut i32 = std::ptr::null_mut();
println!("{:?}", b.as_mut());
}
プログラムをコンパイルして、コンパイラエラー(“error[E0133]: call to unsafe function …”)を発生させてください。
質問します: 「関数の事前条件を知りたい場合、どこを見ますか? ここでは、null ポインタから可変参照への変換がいつ安全なのかを理解する必要が あります。」
確認する場所:
- 関数の API ドキュメント、特に安全性セクション
- ソースコードとその内部の安全性コメント
- モジュールドキュメント
- Rust Reference
as_mut メソッドについては the documentation を参照してください。
Safety セクションを強調します。
Safety
このメソッドを呼び出すときは、ポインタが null であるか、 またはそのポインタを参照に変換可能であることを保証しなければなりません。
「convertible to a reference」ハイパーリンクをクリックして、「Pointer to reference conversion」に進みます
ポインタを参照に変換するためのルール、つまりそれが 「dereferenceable」であるかどうかを突き止めます。
この抜粋(Rust 1.90.0)「Rust のエイリアシング規則を強制しなければなりません。 正確なエイリアシング規則はまだ決まっていません。…」の含意を考えます。