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

/// Возвращает элемент с индексом `index` из `arr`
unsafe fn get(arr: *const i32, index: usize) -> i32 {
    unsafe { *arr.add(index) }
}

«Предусловия безопасности — это условия для кода, которые должны выполняться, чтобы сохранялись гарантии безопасности Rust».

«Вероятно, вы заметите сильную связь между предусловиями безопасности и правилами безопасного Rust».

Спросите: «Каковы предусловия безопасности get?»

  • Указатель arr не равен null, хорошо выровнен и указывает на массив i32
  • index находится в границах массива

Добавьте комментарии о безопасности:

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

/// Возвращает элемент с индексом `index` из `arr`
///
/// # Safety
///
/// - `arr` не равен null, корректно выровнен и указывает на корректное `i32`
/// - `index` находится в границах массива
unsafe fn get(arr: *const i32, index: usize) -> i32 {
    // SAFETY: вызывающий код гарантирует, что index находится в границах
    unsafe { *arr.add(index) }
}

Необязательно: в отладочных сборках можно добавить проверки во время выполнения для дополнительной надёжности.

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

debug_assert!(!arr.is_null());
debug_assert_eq!(arr as usize % std::mem::align_of::<i32>(), 0);