| # References |
| |
| There are two kinds of reference: |
| |
| * Shared reference: `&` |
| * Mutable reference: `&mut` |
| |
| Which obey the following rules: |
| |
| * A reference cannot outlive its referent |
| * A mutable reference cannot be aliased |
| |
| That's it. That's the whole model references follow. |
| |
| Of course, we should probably define what *aliased* means. |
| |
| ```text |
| error[E0425]: cannot find value `aliased` in this scope |
| --> <rust.rs>:2:20 |
| | |
| 2 | println!("{}", aliased); |
| | ^^^^^^^ not found in this scope |
| |
| error: aborting due to previous error |
| ``` |
| |
| Unfortunately, Rust hasn't actually defined its aliasing model. 🙀 |
| |
| While we wait for the Rust devs to specify the semantics of their language, |
| let's use the next section to discuss what aliasing is in general, and why it |
| matters. |