rust - 我可以避免使用显式生命周期说明符,而是使用引用计数 (Rc) 吗?

标签 rust reference lifetime reference-counting borrowing

我正在阅读 Rust Book,一切都非常容易理解(感谢本书的作者),直到关于 lifetimes 的部分.我花了一整天,阅读了很多关于生命周期的文章,但我仍然对正确使用它们感到非常不安全。

不过,我所理解的是显式生命周期说明符的概念旨在解决悬垂引用问题。我还知道 Rust 有引用计数智能指针 (Rc),我认为它与 C++ 中的 shared_ptr 相同,它们具有相同的目的:防止悬挂引用。

考虑到那些生命周期对我来说太可怕了,而智能指针对我来说非常熟悉和舒适(我在 C++ 中经常使用它们),我可以避免生命周期以支持智能指针吗?或者生命周期是我必须在 Rust 代码中理解和使用的不可避免的事情吗?

最佳答案

are lifetimes an inevitable thing that I'll have to understand and use in Rust code?

为了阅读现有的 Rust 代码,您可能不需要了解生命周期。借用检查器理解它们,所以如果它编译了,那么它们就是正确的,您可以只查看代码的作用。

I am very insecure about using them correctly.

了解生命周期注解最重要的一点是它们什么都不做。相反,它们是一种向编译器表达引用之间关系的方式。例如,如果函数的输入和输出具有相同的生命周期,则意味着输出包含对输入(或部分输入)的引用,因此不允许比输入的生命周期更长。 “不正确”地使用它们意味着您告诉编译器一些关于引用生命周期的信息,但它可能被证明是不真实的——它会给您一个错误,所以没有什么可担心的!

can I avoid the lifetimes in favor of smart pointers?

可以选择完全避免使用引用并在任何地方使用Rc。您可能会错过 Rust 的一大特性:生命周期和引用构成了最重要的零成本抽象之一,它们使 Rust 既快速又安全。用 Rust 编写的代码没有人会尝试用 C/C++ 编写,因为人类永远无法绝对确定他们没有引入内存错误。避免 Rust 引用以支持智能指针主要会导致代码变慢,因为智能指针有运行时开销。

许多 API 使用引用。为了使用这些 API,您至少需要对正在发生的事情有一定的了解。

最好的理解方式就是编写代码并从哪些有效哪些无效中获得直觉。 Rust 的错误消息非常好,对形成这种直觉有​​很大帮助。

关于rust - 我可以避免使用显式生命周期说明符,而是使用引用计数 (Rc) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782928/

相关文章:

file - Rust-开放的动态作者人数

rust - 为什么存在对 Rust 中复制类型的不可变引用?

c++ - 未定义的函数引用错误?

rust - 如何为关联常量在 Self 上设置显式生命周期?

iterator - 如何设置盒装闭包捕获 `self` 的生命周期?

rust - rustup 安装到哪里?

rust - 我可以在循环的多次迭代中传递相同的可变特征对象而不添加间接寻址吗?

dataframe - PySpark DataFrame 列引用 : df. col vs. df ['col' ] vs. F.col ('col')?

reference - Tableau 表格上的引用线

vector - 对于每个结构都包含结构数组子集的结构向量,正确的模式是什么?