【发布时间】:2021-06-12 04:36:18
【问题描述】:
我读过 Rust 的编译器在编译时“插入”内存管理代码,这听起来有点像“编译时垃圾收集”。
这两种想法有什么区别?
我见过What does Rust have instead of a garbage collector?,但那是关于运行时垃圾收集,而不是编译时。
【问题讨论】:
-
您的问题可能会以基于意见的方式结束,但请查看 RAII,这是 C++ 和 Rust 之间共享的概念,可能最接近“编译时垃圾收集”可能指的是。
-
取决于你背后的意思。 “垃圾收集”意味着从内存中删除程序中没有活动引用的对象。在 Rust 的情况下,只有当拥有变量超出范围时才应该删除对象。所以 Rust 在编译时或运行时都不需要垃圾回收。它确定性地知道在哪里删除一个对象,这几乎不能称为“集合”,只是从堆/堆栈中删除
-
我认为链接问题的答案是高质量的并且可以解决您的问题——如果您有一些挥之不去的疑问或者您认为我错误地关闭了这个问题,请edit这个问题澄清如何。这绝对是 Rust 的一个有趣的方面,它与任何其他语言的工作方式都不太相似(C++ 与 RAII 很接近,但默认值不同。)
-
重复的答案很好地解释了“垃圾收集器”的作用以及 Rust 的作用。术语“编译时垃圾收集”是否足以描述 Rust 所做的事情可能是题外话。
-
答案可能是肯定的,也可能是否定的,这取决于“编译时垃圾回收”的含义。在那之前,这个问题还不清楚。