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

Закрепление (pinning)

В этом разделе курса рассматривается:

  • Что такое «pinning»
  • Зачем он нужен
  • Как Rust его реализует
  • Как он взаимодействует с unsafe и FFI

План

Этот раздел должен занять около 1 часа 20 минут. В нём есть:

СлайдДлительность
Что такое закрепление5 минут
Определение Pin5 минут
PhantomPinned5 минут
Пример самоссылочного буфера50 минут
Pin и Drop15 минут

«Pinning, то есть удержание адреса памяти значения в фиксированном месте, — одна из самых сложных концепций в Rust».

«Обычно его видят только в асинхронном коде, то есть в poll(self: Pin<&mut Self>), но применимость pinning шире».

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

Заметный связанный с этим сценарий — FFI с C++. Rust должен считать, что любой объект C++ со ссылкой может оказаться самоссылающейся структурой данных.

«Чтобы лучше понять этот конфликт, сначала нужно хорошо разобраться в семантике перемещения (move) в Rust».