Borrowing

Rust has two kinds of references

  • &T is a non-null reference to an immutable object, similar to const T& in C++.
  • &mut T is a mutable (or unique) reference.

The core of Rust's safety guarantees is the "shared xor mutable" rule. An object can be borrowed by either a single &mut reference, or multiple & references.

fn main() {
    // `let mut` defines a mutable variable. By default variables are immutable.
    let mut list = vec![1, 2, 3];

    // Creating an iterator borrows `list`
    let mut iter = list.iter();
    println!("{:?}", iter.next());

    // We cannot mutate `list` here while it is borrowed
    // list.push(4);

    println!("{:?}", iter.next());
}