Определение предусловий
Где найти предусловия безопасности?
// 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 …”).
Спросите: «Где бы вы стали искать предусловия функции? Здесь нужно понять, когда безопасно преобразовать указатель, в том числе нулевой, в изменяемую ссылку».
Где искать:
- Документация API функции, особенно раздел о безопасности (Safety)
- Исходный код и его внутренние комментарии о безопасности
- Документация модуля
- Справочник Rust
Посмотрите документацию метода as_mut.
Обратите внимание на раздел Safety.
Safety
При вызове этого метода нужно убедиться, что либо указатель равен null, либо его можно преобразовать в ссылку.
Перейдите по ссылке «convertible to a reference» к разделу «Pointer to reference conversion».
Найдите правила преобразования указателя в ссылку, то есть то, является ли он «dereferenceable».
Обдумайте, к чему приводит этот фрагмент (Rust 1.90.0): «You must enforce Rust’s aliasing rules. The exact aliasing rules are not decided yet, …»