Lifetime in Rust
In Rust, lifetimes are a way of ensuring that references are valid for as long as they are needed and no longer. Lifetimes prevent dangling references, which can lead to undefined behavior.
Example
Here is a simple example demonstrating lifetimes in Rust:
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } fn main() { let string1 = String::from("long string is long"); let string2 = "xyz"; let result = longest(string1.as_str(), string2); println!("The longest string is {}", result); }
In this example, the function longest
takes two string slices with the same lifetime 'a
and returns a string slice with the same lifetime 'a
. This ensures that the returned reference is valid as long as both input references are valid.
Key Points
- Lifetimes are denoted with an apostrophe followed by a name, like
'a
. - They help the Rust compiler ensure that references do not outlive the data they point to.
- Lifetimes are inferred by the compiler in many cases, but sometimes they need to be explicitly annotated.
For more detailed information, refer to the Rust Book.