Что делать с вытекшими за скоуп ссылками?
В Расте каждый выход аллиасится( инвариант с одной мутирующей ссылкой)
Ссылка одна - ты владелец
Ссылки больше одной — неопределенное поведение программы
Поэтому ссылки рождаются ручными костылями например как:
fn main() {
struct A ( u32, u32 );
let mut a = A (1,1);
let A (a, b) = &mut a;
}
И это как slice.split который без unsafe не реализуется
Используешь аннотации везде получается(как на примере выше) —-> нарушение базовых инвариантов(ссылка на самом деле не ссылка)
И не передается куда-то из скоупа, и в рамках лайфтацмов нет подобных отношений
Маня-чекер в Расте не может взять инфу о всех ссылках как это делают нормальные анализаторы(знает откуда создалась ссылка, и какую ссылку указывают на один и тот же объект)
Здесь по поводу ссылок
бтф, во что нашел https://programming-language-benchmarks.vercel.app/
Обсуждают сегодня