Bronze垃圾收集器是否使 Rust 更易于使用?

21-12-10 banq

Rust 是一种类型和内存安全的通用编程语言。Rust 不使用垃圾收集器,而是通过复杂但复杂的类型系统来实现这些属性。这样做使 Rust 非常高效,但使 Rust 相对难以学习和使用。

我们为 Rust 设计了 ​​Bronze,这是一个可选的、基于库的垃圾收集器。

为了了解 Bronze 是否能让 Rust 更有用,我们对来自 633 人班级的志愿者进行了一项随机对照试验,总共收集了 428 名学生的数据。我们发现,对于需要管理复杂别名的任务,Bronze用户更有可能在可用时间内完成任务,而完成任务的用户只需要大约三分之一的时间(4 小时与 12 小时)。

论文点击标题。

 

网友讨论

一个常见的谬误是,Rust借用检查器只是 GC 的替代品,其实这是谬误,它不仅限于此:它可以为您提供 Java 或 Go 等无法提供的安全保证(没有可变别名和数据竞争)。

 至少对我来说,这些额外的保证并没有防止很多错误。特别是,我的代码很少受到数据竞争的影响:通常任何共享状态都是一个文件或网络资源,可以被多个主机上的多个进程访问,而 Rust 的借用检查器在这些方面没有帮助,但我仍然需要付出成本(我知道生产力会随着经验而提高,但回报会迅速减少,而且明显的共识似乎是 GC 和 BC 之间仍然存在很大的生产力差距)。

 

Rust如何在允许多个可变引用的同时获得安全性?是通过强制执行单线程代码吗?

是的,他们不试图保证线程安全:

Rust 一次只允许一个对一个值的可变引用。为了获得更大的灵活性,(标准)Rust 通过对对象的不可变引用来支持对象的内部变异 。程序员可以借用一个允许变异的值的特殊引用,并且运行时确保一次只能存在一个这样的引用,从而可以安全地放松编译时检查。使用 Bronze,可以通过对每个垃圾收集对象的所有引用进行更改,无需额外工作。一个关键的权衡是 Bronze 不保证线程安全;与其他垃圾收集语言一样,确保安全是程序员的责任。

 

听起来这篇论文更多地是关于 Rust 中当前内部可变性 API 的可用性,而不是关于 GC。我可以证明,在 Rust 中获取和使用内部可变性 API 非常困难。我很想看到更多关于如何更改这些 API 以提高其可用性的工作。

1
猜你喜欢