Пример геттера
// 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);