2022-07-15 15:01:32 +03:00
|
|
|
# Lifetimes
|
|
|
|
|
|
|
|
Lifetimes tell the compiler how to check whether references live long
|
|
|
|
enough to be valid in any given situation. For example lifetimes say
|
|
|
|
"make sure parameter 'a' lives as long as parameter 'b' so that the return
|
2023-03-31 12:20:11 +03:00
|
|
|
value is valid".
|
2022-07-15 15:01:32 +03:00
|
|
|
|
2023-03-31 12:20:11 +03:00
|
|
|
They are only necessary on borrows, i.e. references,
|
2022-07-15 15:01:32 +03:00
|
|
|
since copied parameters or moves are owned in their scope and cannot
|
|
|
|
be referenced outside. Lifetimes mean that calling code of e.g. functions
|
2023-03-31 12:20:11 +03:00
|
|
|
can be checked to make sure their arguments are valid. Lifetimes are
|
2022-07-15 15:01:32 +03:00
|
|
|
restrictive of their callers.
|
|
|
|
|
2023-03-31 12:20:11 +03:00
|
|
|
If you'd like to learn more about lifetime annotations, the
|
|
|
|
[lifetimekata](https://tfpk.github.io/lifetimekata/) project
|
|
|
|
has a similar style of exercises to Rustlings, but is all about
|
2023-03-25 12:00:28 +03:00
|
|
|
learning to write lifetime annotations.
|
|
|
|
|
2022-07-15 15:01:32 +03:00
|
|
|
## Further information
|
|
|
|
|
|
|
|
- [Lifetimes (in Rust By Example)](https://doc.rust-lang.org/stable/rust-by-example/scope/lifetime.html)
|
2023-03-16 02:56:15 +03:00
|
|
|
- [Validating References with Lifetimes](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html)
|