Небезопасный код в Rust
В языке Rust есть две части:
- Безопасный Rust: безопасен для памяти, неопределённое поведение невозможно.
- Небезопасный Rust: может вызвать неопределённое поведение, если нарушены предусловия.
В этом курсе мы в основном видели безопасный Rust, но важно знать, что такое небезопасный Rust.
Небезопасный код должен быть небольшим и изолированным, а его корректность нужно тщательно документировать. Его следует оборачивать в безопасный слой абстракции.
Небезопасный Rust даёт доступ к пяти новым возможностям:
- Разыменование сырых указателей.
- Доступ к изменяемым статическим переменным и их изменение.
- Доступ к полям
union. - Вызов
unsafeфункций, включая функцииextern. - Реализация
unsafeтрейтов.
Далее кратко рассмотрим возможности небезопасного Rust. Полные подробности см. в главе 19.1 The Rust Book и в Rustonomicon.
Небезопасный Rust не означает, что код некорректен. Это значит, что разработчики отключили некоторые проверки безопасности компилятора и должны сами писать корректный код. Компилятор больше не проверяет соблюдение правил безопасности памяти Rust.