Ownership and Borrowing

Rust Lifetimes Explained

Tell the compiler how long a returned reference stays valid with 'a.

  • Intermediate
  • 3 min read
  • 1 runnable example
What you'll learn
  • What a lifetime is
  • Annotating with 'a
  • Lifetimes in structs
fn longest<'a>(a: &'a str, b: &'a str) -> &'a str
  1. 1a: &'a strinput
  2. 2b: &'a strinput
  3. 3-> &'a strvalid as long as both inputs

References must not outlive their data

A lifetime describes how long a reference is valid. Most of the time the compiler works it out. When a function returns a reference that could come from more than one parameter, you name the lifetime with 'a.

The signature of longest says that the result lives as long as both inputs do. subtitle is a string literal, which lives for the whole program, so result is still valid after the inner block. A struct that stores a reference needs a lifetime too.

Key points

  1. Most lifetimes are worked out by the compiler.
  2. 'a links the result to the inputs.
  3. A struct that stores a reference needs a lifetime.

Runnable Rust example

Rust
Run code →
main.rs
fn longest<'a>(a: &'a str, b: &'a str) -> &'a str {
    if a.len() >= b.len() {
        a
    } else {
        b
    }
}

struct Highlight<'a> {
    text: &'a str,
}

fn main() {
    let title = String::from("The Rust Book");
    let result;
    {
        let subtitle = "2021 edition";
        result = longest(&title, subtitle);
    }
    println!("longest: {result}");

    let highlight = Highlight { text: &title[4..8] };
    println!("highlight: {}", highlight.text);
}
Get a Run button for this example Result of running the code
longest: The Rust Book
highlight: Rust

Practice

Open the example in the online compiler, change a value or add a line, and predict the output before you run it. Then break the code on purpose and read the compiler's message.

Finished this lesson?

Mark it as learned to track your progress.

Practice with a challenge

Use what this lesson covers to solve a real problem. Each challenge runs in your browser with instant tests and an AI review.

All challenges