BorrowCheck › Ядро языка Rust

Заимствование, ссылки, NLL

Правила неизменяемых и изменяемых ссылок, нелексические времена жизни, повторное заимствование, разделение заимствований.

Тема объясняет заимствование (borrowing): правило, по которому в каждый момент у значения может быть либо сколько угодно неизменяемых ссылок &T, либо одна изменяемая &mut T. Вопросы проверяют, почему &T реализует Copy, а &mut T нет, и что происходит с владельцем, пока на значение действует изменяемое заимствование. Раздел о нелексических временах жизни (NLL) показывает, что заимствование длится до последнего использования ссылки, а не до конца блока, и разбирает случаи, когда его продлевают деструктор или условный возврат ссылки. Разделы о повторном заимствовании (reborrowing) и разделении заимствований описывают неявный reborrow при вызове, его отсутствие для обобщённого параметра, независимые &mut на разные поля структуры, split_at_mut и iter_mut. Отдельно разбираются висячие ссылки и временные значения, включая продление времени жизни временного значения (temporary lifetime extension), а также двухфазные заимствования (two-phase borrows), благодаря которым компилируется вызов v.push(v.len()). Тема опирается на владение и готовит к явным временам жизни.

36 вопросов: базовый уровень — 16, средний — 16, углублённый — 4. 6 справок, 11 источников.

Разделы

  1. Неизменяемые и изменяемые ссылки
  2. Нелексические времена жизни (NLL)
  3. Повторное заимствование
  4. Разделение заимствований
  5. Висячие ссылки
  6. Двухфазные заимствования

Предыдущая тема: Владение, перемещение, Copy/Clone · Следующая тема: Времена жизни, подтипизация, вариантность