【问题标题】:How does Rust enforce/implement RAII [closed]Rust 如何执行/实施 RAII [关闭]
【发布时间】:2018-06-12 09:42:46
【问题描述】:

我正在研究一种(也许)严肃的编程语言,并想了解如何实现内存管理。我希望这种语言能够强制执行 RAII,类似于 Rust,但与 rust 不同的是,这种语言是面向对象的,我希望我可以实现管理自己内存的对象(如 Rust 中的Boxes)。谁能详细介绍一下 Rust 如何处理对堆内存的引用?

【问题讨论】:

  • 关于 Rust 如何处理对堆的引用,您还不清楚什么? (例如,您能否告诉我们您所知道的以及您认为正在发生的事情,以便我们了解如何填补空白?)
  • rust 是面向对象的...对于管理资源的数据类型,您需要一种指定“析构函数”的方法(除非语言本身处理资源管理)。 rust 为此使用了Drop trait(当然需要语言本身支持)。

标签: rust heap-memory raii


【解决方案1】:

我认为实现类最明显的方式是:

  • 您的类变量被实现为指针,就像在 C# 和 Java 中一样。
  • 对象只有一个所有者,并且所有类变量都具有移动语义以强制执行这一点,就像在 Rust 中一样。
  • 内存是需要清理的资源,因此所有类变量在调用所指对​​象的析构函数(如果有)后,也会调用内存分配器的释放例程,就像在 C++ 中一样。
  • 您在类型系统中引入生命周期,以确保借出/借用对象不允许任何非拥有引用超过它,就像在 Rust 中一样。

【讨论】:

  • 好的,这是一个好的开始,但是您将如何实现生命周期并将语义转移到这些类中?
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2011-01-19
  • 2011-06-25
  • 2012-05-28
相关资源
最近更新 更多