fn foo<'a>(x: &'a i32, y: &'a i32) {}
fn main() {
let a = 123;
{
let b = 234;
foo(&a, &b);
}
}
Надеемся, что в приведенном выше коде &a
и &b
должны быть ссылки с разным временем жизни.
Как компилятор определяет время жизни var 'a
для foo
? Насколько я могу судить, он не использует стандартный алгоритм унификации Хиндли-Милнера. Время жизни должно быть внутренней областью или некоторым пересечением двух времен жизни.
Является ли вывод времени жизни полностью отдельным процессом от вывода стандартного типа?
Использует ли компилятор типы пересечения или какое-то отношение подтипов между временами жизни, чтобы выбрать наиболее ограниченное время жизни?