7

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

 2 years ago
source link: https://www.jdon.com/57952
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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 以提高其可用性的工作。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK