Summary

  • You are allowed to borrow references to values

  • Borrowing a reference does not move ownership

  • Borrowing is the preferred way to solve the “move in move out” problem we encountered previously

  • References have their own type, and i32 is different than &i32

  • We also have mutable references such as &mut i32, which allow the values behind the reference to be changed

  • Mutable references can only be borrowed from mutable values

  • References are, essentially, addresses for where the original value lives in memory

  • If you want to operate directly on the value behind a reference, you can dereference using the * operator

  • A reference cannot outlive the value it refers to

  • To avoid confusion around mutation and references, Rust has some rules you need to abide by

    • You cannot mutate a value if there is a reference to it

    • You can have multiple immutable references to a value

    • You can only have one mutable reference to a value, and then no other immutable references to it, or access the value directly

  • You can create an immutable reference from a mutable reference, but not the other way around.