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

У ключевого слова unsafe две роли

  1. Создание API с соображениями безопасности

    • небезопасные функции: unsafe fn get_unchecked(&self) { ... }
    • небезопасные трейты: unsafe trait Send {}
  2. Использование API с соображениями безопасности

    • вызов встроенных небезопасных операторов: unsafe { *ptr }
    • вызов небезопасных функций: unsafe { x.get_unchecked() }
    • реализация небезопасных трейтов: unsafe impl Send for Counter {}
This slide should take about 5 minutes.

Две роли:

  1. Создание API с соображениями безопасности и определение того, что нужно учитывать
  2. Использование API с соображениями безопасности и подтверждение того, что эти соображения учтены

Создание API с соображениями безопасности

«Во-первых, ключевое слово unsafe позволяет создавать API, которые могут нарушить гарантии безопасности Rust. В частности, ключевое слово unsafe нужно использовать при определении небезопасных функций и небезопасных трейтов».

«В этой роли вы сообщаете пользователям вашего API, что им нужно быть осторожными».

«Создатель API должен сообщить, какой осторожности требуется придерживаться. Небезопасные API неполны без документации о требованиях безопасности. Вызывающий код должен знать, что он выполнил все требования, а это невозможно, если их не записать».

Использование API с соображениями безопасности

«Ключевое слово unsafe выполняет свою вторую роль — использование API — когда оно стоит рядом с фигурной скобкой».

«В этой роли ключевое слово unsafe означает, что автор был внимателен. Он проверил, что код безопасен, и дал гарантию другим».

«Небезопасные блоки встречаются чаще всего. Они позволяют вызывать небезопасные функции, определённые в первой роли».

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

«Ключевое слово unsafe также может использоваться для реализации небезопасных трейтов».