|
|
|
# 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.
|