Правило заимствований
Правило заимствований - это фундаментальное ограничение системы владения Rust, которое контролирует количество и тип ссылок на одни и те же данные в определённой области видимости. Оно гласит: у вас может быть либо любое количество неизменяемых ссылок, либо только одна изменяемая ссылка на конкретное значение одновременно. Это правило применяется компилятором для статической проверки безопасности памяти без сборщика мусора.
Синтаксис
Правило не имеет специального синтаксиса, но его действие проявляется при создании ссылок:
let x = 5;
let r1 = &x; // immut borrow
let r2 = &x; // immut borrow is ok
// let m = &mut x; // ERROR: cannot borrow as mutable because also borrowed as immutable
Пример
Давайте создадим несколько неизменяемых ссылок на одну переменную и убедимся, что это разрешено:
fn main()
{
let x = 5;
let r1 = &x;
let r2 = &x;
println!("{} {}", r1, r2);
}
Результат выполнения кода:
5 5
Пример
Попытка создать изменяемую ссылку, когда уже есть неизменяемая, приведёт к ошибке компиляции:
fn main()
{
let mut x = 5;
let r1 = &x;
let m = &mut x;
println!("{} {}", r1, m);
}
Результат выполнения кода (ошибка компиляции):
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
Смотрите также
-
страница
borrowing,
которая описывает процесс заимствования в Rust -
страница
mut borrow,
которая описывает изменяемое заимствование -
страница
immut borrow,
которая описывает неизменяемое заимствование -
страница
ownership,
которая описывает систему владения в Rust