Hasty Briefsbeta

双语

Garbage collection is contrarian

4 months ago
  • #rust
  • #lifetimes
  • #garbage-collection
  • Nova JavaScript引擎采用Rust借用检查器来建模垃圾回收机制,确保未被根引用的句柄不会存活超过垃圾回收安全点。
  • 当前模型因将代码变成一堆bind/unbind调用组成的'汤'而受到批评,有人认为其比C++更糟糕。
  • 作者最初假设该模型是正确的,但实际限制促使他们探索逆变生命周期在垃圾回收句柄中的应用。
  • 堆上的垃圾回收句柄应具有'static生命周期,而栈上的句柄应具有比'static更短的'local生命周期。
  • Nova当前采用的协变生命周期模型无法安全地将局部句柄固定到堆上,不得不使用unsafe Rust作为变通方案。
  • 逆变生命周期允许将堆句柄的生命周期缩短为局部生命周期,这与垃圾回收语义相吻合。
  • 逆变引用充当'接收器'角色——可以写入值但无法安全读取(除非提供额外证明),这给安全API设计带来挑战。
  • 提议的逆变句柄模型将通过消除大量bind/unbind调用来简化Nova代码结构,提升人机交互体验。
  • 逆变引用在自引用数据结构中可能有更广泛应用,但其在Rust中的安全使用仍需进一步探索。
  • 社区反馈指出,借助不变性可以实现完全安全的无根句柄表示,gc-arena库已对此进行实践验证。