Rust имеет одну специальную встроенную аннотацию, которая называется 'static и которая означает, что ссылка будет существовать в течение всей программы.
Например, ранее была рассмотрена следующая программа:
fn main(){ let message = get_message(); println!("message: {}", message); } fn get_message<'a>() -> &'a str { "hello" }
Фактически здесь мы имеем дело со статическим временем жизни ссылки, которое равно времени выполнения программы. Почему? Строковые литералы сохраняются в бинарном виде и доступны в течение всего времени выполнения программы. Поэтому время жизни описывается как статическое. То есть ссылка живет в течение всей работы программы. И мы могли бы здесь применить аннотацию 'static:
fn main(){ let message = get_message(); println!("message: {}", message); } fn get_message() -> &'static str { "hello" }
Причем не важно, в какой области видимости создается ссылка, она будет доступна в течение все работы программы. Например:
fn main(){ let message; { let words = get_message(); message = words; } // ссылка, возвращенная get_message, продолжает существовать println!("message: {}", message); } fn get_message() -> &'static str { "hello" }
Здесь ссылка возвращается во вложенном блоке кода, который по идее создается свою область видимости, однако по-прежнему проблем с компиляцией и выполнением программы не возникнет. Поскольку возвращается строковый слайс в виде строкового литерала со статическим временем жизни.