Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpUsBl 116 of 288 menu
◀ ▶

Небезопасный блок в Rust

Ключевое слово для такого участка пишут перед фигурными скобками. Внутри блока можно выполнять операции, которые в обычном коде запрещены, потому что компилятор не может доказать их безопасность.

За пределами скобок снова действуют все обычные правила: там нельзя, например, читать память по сырому адресу. Сам блок не делает программу целиком небезопасной, он лишь локально снимает часть проверок.

Возьмем живое локальное число, сохраним адрес в сыром указателе и прочитаем значение только внутри блока:

fn main() { let x = 7; let p: *const i32 = &x; unsafe { println!("{}", *p); } }

На экране появится 7. Создание указателя из имени x здесь обычное, а вот обращение к памяти по p компилятор пропускает лишь внутри блока.

Тот же каркас подойдет для другого литерала, если переменная по-прежнему жива в этой области видимости:

fn main() { let value = 15; let addr: *const i32 = &value; unsafe { let copy = *addr; println!("{}", copy); } }

Дано число:

let num = 9;

Объявите переменную с этим литералом, сохраните адрес в сыром указателе и выведите число, прочитав его только внутри небезопасного блока.

Дано число:

let num = 4;

Переменная n хранит этот литерал. Скажите, где в программе можно прочитать значение по указателю на n, а где компилятор откажет в сборке.

Скажите, меняется ли ответственность автора для строк кода сразу после закрывающей скобки небезопасного блока.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить