首页 文章

Rust生命周期会影响编译程序的语义吗?

提问于
浏览
12

我正试着在Rust中度过生命,并问自己,他们是“只是”一种安全措施(以及在错误的情况下沟通如何确保安全性的方式),或者是否存在不同选择的情况生命周期实际上改变了程序的运行方式,即生命周期是否与编译的程序产生语义差异 .

并且"lifetimes"我指的是我们所包含的所有讨厌的小 '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 回答

  • 17

    不,生命周期不会以任何方式影响生成的机器代码 . 在一天结束时,它只是编译代码的“指针” .

    因为我们是人类说人类语言,所以我们倾向于将两个不同但相关的概念混为一谈:具体的生命周期和一般的生命周期参数 .

    All 编程语言具有具体的生命周期 . 这恰好对应于何时释放资源 . 这就是你的例子所展示的内容,事实上,C的工作原理与Rust相同 . 这通常称为资源获取初始化(RAII) . 垃圾收集的语言也有生命周期,但是当它们结束时它们可能更难确定 .

    什么使Rust在这个区域整洁是通用的生命周期参数,我们知道 'a'static . 这些允许编译器跟踪底层指针,这样程序员就不必担心指针是否足够长时间保持有效 . 这适用于在结构中存储引用并将它们传递给函数和从函数传递 .

相关问题