Небезпечні функції
Виклик небезпечних функцій
Функцію або метод можна позначити як unsafe
, якщо вони мають додаткові передумови, які ви повинні підтримувати, щоб уникнути невизначеної поведінки:
Написання небезпечних функцій
Ви можете позначити власні функції як unsafe
, якщо вони вимагають певних умов, щоб уникнути невизначеної поведінки.
Speaker Notes
This slide should take about 5 minutes.
Виклик небезпечних функцій
get_unchecked
, як і більшість функцій _unchecked
, небезпечна, оскільки може створити UB, якщо діапазон невірний. Функція abs
небезпечна з іншої причини: вона є зовнішньою функцією (FFI). Виклик зовнішніх функцій зазвичай є проблемою лише тоді, коли ці функції роблять щось із вказівниками, що може порушити модель пам’яті Rust, але загалом будь-яка функція C може мати невизначену поведінку за довільних обставин.
У цьому прикладі "C"
- це ABI; інші ABI також доступні.
Написання небезпечних функцій
Насправді ми не будемо використовувати вказівники для функції swap
- це можна безпечно зробити за допомогою посилань.
Зверніть увагу, що небезпечний код дозволяється всередині небезпечної функції без блоку unsafe
. Ми можемо заборонити це за допомогою #[deny(unsafe_op_in_unsafe_fn)]
. Спробуйте додати його і подивіться, що станеться. Ймовірно, це буде змінено у майбутньому виданні Rust..