**Собственность**
В Rust, каждое значение имеет владельца, который отвечает за его создание и удаление. Это означает, что когда вы создаете значение, вы автоматически становитесь его владельцем. Собственность определяет, кто имеет право доступа и манипулирования значением.
Например, рассмотрим следующий код:
```rust
let s = String::from("Привет, мир!");
```
В этом примере, переменная `s` является владельцем строки "Привет, мир!". Это означает, что `s` имеет полный контроль над строкой и может ее изменять или удалять.
**Заимствование**
Заимствование – это механизм, который позволяет вам использовать значение без принятия собственности над ним. Когда вы заимствуете значение, вы получаете ссылку на него, но не становитесь его владельцем.
В Rust, существует два типа заимствований: неизменяемое заимствование (`&T`) и изменяемое заимствование (`&mut T`).
Неизменяемое заимствование позволяет вам читать значение, но не изменять его. Изменяемое заимствование позволяет вам изменять значение, но только если вы явно указали, что хотите изменить его.
Например, рассмотрим следующий код:
```rust
let s = String::from("Привет, мир!");
let len = calculate_length(&s);
```
В этом примере, функция `calculate_length` заимствует строку `s` неизменяемым образом. Это означает, что функция может читать строку, но не может ее изменять.
**Правила собственности и заимствования**
В Rust, существуют три основных правила собственности и заимствования: