Как аннотация времени жизни в сигнатуре функции связывает входную ссылку с возвращаемой?
База Hintsage
Времена жизни
Lifetime annotations и связи времени жизни ссылок.
Практика
Вопросы: Времена жизни
В каких случаях Rust требует явных аннотаций времени жизни в сигнатуре функции, хотя ссылки уже присутствуют в параметрах?
Как параметр времени жизни у структуры, содержащей ссылку, ограничивает срок существования экземпляра?
Разбор последствий: означает ли одна и та же аннотация времени жизни у двух входных ссылок, что вызывающий обязан предоставить ссылки с одинаковым сроком действия?
Может ли явная аннотация времени жизни продлить срок существования значения, на которое ссылается ссылка?
Практическая ситуация: объясните, почему одна передача удовлетворяет ограничению T: 'static, а другая — нет.
fn accept<T: 'static>(_: T) {}
fn main() {
{
let text = String::from("hello");
accept(text);
}
{
let text = String::from("hello");
accept(&text); // ошибка компиляции
}
}
Объясните механизм отношения «время жизни 'a дольше 'b»: какой вывод о допустимом использовании ссылки следует из этой связи?
Что гарантирует аннотация dyn Trait + 'a и почему она не задаёт срок жизни самого объекта?
Практическая ситуация: почему ограничение обратного вызова на работу с любой длительностью заимствования выражают через for<'a>, а не через один параметр времени жизни?
Разбор последствий: что именно гарантирует требование, чтобы обобщённый тип не содержал ссылок короче заданного времени жизни, и чего оно не гарантирует?
При чтении типа &'a mut T что именно ограничено временем жизни 'a?
При вызове функции с параметром времени жизни кто определяет конкретную длительность 'a — автор функции или компилятор на стороне вызывающего кода?
Сравнение: почему ссылка с более длинным временем жизни может использоваться там, где ожидается более короткое, но не наоборот?
Что меняется при использовании псевдонима типа со ссылкой: скрывает ли он требования к её времени жизни?
Как трактовать два разных параметра времени жизни в типе результата функции, если оба связаны с входными ссылками?
Сравните смысл времени жизни, объявленного у реализации типа, со временем жизни, объявленного отдельно у метода: когда каждое из них выбирается?
Разберите различие между временем жизни, указанным в типе ссылки, и фактической длительностью заимствования, которую выбирает компилятор.
Как компилятор трактует явный заполнитель времени жизни '_ в типе ссылки?
Почему аннотация времени жизни не делает самоссылочную структуру безопасной для перемещения?
Представьте, что изменяемую ссылку временно передали с более коротким временем жизни: почему исходная ссылка остаётся недоступной до окончания этого заимствования?
Показано 1–20 из 50