Влияет ли время жизни Rust на семантику скомпилированной программы?

Я пытаюсь уловить времена жизни в Rust и спрашиваю себя, являются ли они "просто" мерой безопасности (и способом сообщить, как обеспечивается безопасность, или нет, в случае ошибок) или есть случаи, когда разные варианты выбора время жизни фактически меняет способ работы программы, т. е. имеет ли время жизни семантическое значение для скомпилированной программы.

А с "жизнями" я имею в виду все надоедливые маленькие 'a, 'b, 'static маркеры, которые мы включили, чтобы осчастливить контролера заимствования Конечно, написание

{
    let foo = File::open("foo.txt")?;
} 
foo.write_all(b"bar");

вместо

let foo = File::open("foo.txt")?;
foo.write_all(b"bar");

закроет файловый дескриптор до того, как произойдет запись, даже если впоследствии мы сможем получить доступ к foo, но такого рода определение области действия и вызов деструктора также происходит в C++.

1 ответ

Решение

Нет, время жизни никак не влияет на сгенерированный машинный код. В конце концов, все это "просто указатели" на скомпилированный код.

Поскольку мы - люди, говорящие на человеческом языке, мы склонны объединять две разные, но взаимосвязанные концепции: конкретные времена жизни и общие параметры времени жизни.

Все языки программирования имеют конкретные времена жизни. Это просто соответствует тому, когда ресурс будет выпущен. Это то, что показывает ваш пример, и действительно, C++ работает так же, как и Rust. Это часто известно как Инициализация Ресурса - Инициализация (RAII). Языки, собираемые мусором, тоже имеют время жизни, но их может быть сложнее зафиксировать точно, когда они закончатся.

Что делает Rust аккуратным в этой области, так это общие параметры времени жизни, вещи, которые мы знаем как 'a или же 'static, Это позволяет компилятору отслеживать базовые указатели, так что программисту не нужно беспокоиться, будет ли указатель оставаться действительным достаточно долго. Это работает для хранения ссылок в структурах и передачи их в функции и из функций.

Другие вопросы по тегам