Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Определение предусловий

Где найти предусловия безопасности?

// Copyright 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn main() {
    let b: *mut i32 = std::ptr::null_mut();
    println!("{:?}", b.as_mut());
}
This slide and its sub-slides should take about 10 minutes.

Попробуйте скомпилировать программу, чтобы получить ошибку компилятора (“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, …»