Я пытаюсь убедить жизнь в Rust и спросил себя, являются ли они "просто" мерой безопасности (и способом сообщить, как безопасность обеспечивается или нет, в случае ошибок) или если есть случаи, когда различные варианты времени жизни фактически изменяют ход выполнения программы, т.е. изменяют ли время жизни семантическую разницу с скомпилированной программой.
И с "временами жизни" я ссылаюсь на все надоедливые маленькие 'a
, 'b
, 'static
маркеры, которые мы включаем, чтобы сделать проверку заем счастливой. Конечно, писать
{
let foo = try!(File::open("foo.txt"));
}
foo.write_all(b"bar");
вместо
let foo = try!(File::open("foo.txt"));
foo.write_all(b"bar");
закроет дескриптор файла до того, как произойдет запись, даже если бы мы могли получить доступ к foo впоследствии, но этот вид определения области и деструктора также происходит в С++.