Rust 曾经有大量的指针类型;他们是什么,每个人都发生了什么?

Joh*_*lla 3 rust

Rust 曾经有大量的指针类型:

较旧的 Rusts 有更多的指针类型,它们现在已经消失了。

https://doc.rust-lang.org/guide-pointers.html

我希望了解其中一些的年表,以更深入地了解语言的演变。

Q1:他们是什么?是否有我可以查看的早期版本的 Rust 在线文档,或者我是否必须重新编译旧文档才能这样做?

Q2:随着语言的发展,每种指针类型变成了什么(例如变得多余,功能在其他地方合并,作为一个特性被删除等)?

Apl*_*123 6

来自指南的存档: 备忘单截图

有趣的是,似乎 Rust 过去常常调用 Box、Rc 和 Arc 指针类型。因此,不幸的是,该指南声称 Rust 曾经拥有的指针类型实际上仍在该语言中。然而,这并不意味着这些类型背后仍然没有故事。Rust 实际上曾经有两种不同的盒子类型, ~Tand @T,但是它们在 0.11.0 版本中分别被移除了,取而代之的是BoxGc,(不管你信不信,当时 Rust 实际上有一个垃圾收集器)。在1.0.0 alpha 中box关键字(早在 0.1.0 就在语言中)被功能门控以进行重新设计,直到今天仍在进行讨论. 在那次更改之后,,没有发生真正的重大变化Box除了几个额外的特征实现和方法添加。

现在,对于 Arc 和 Rc。Arc似乎早在 0.3 版中就已添加,并在 0.7 版Rc添加。此外,与现代 Rust 不同,Rc没有办法获得可变引用,而是选择同时使用RcRcMut. Arc更奇怪的是,有一个不可变的ARC,一个MutexARC(而不是当前的Arc<Mutex<T>>和一个可变的RWARC。在0.8 版本中,尽管由于某种原因没有出现在变更日志中,但ARC最终还是小写为Arc. 在版本 0.9 中,更多未记录的更改发生在被神秘删除的地方。一个被添加到Rc从 extra crate 移到 std 的地方,并且RcMutUnsafeArcstd::sync::arc,却extra::arc::Arc留了下来。在0.10 版本中Weak添加了循环中断,在该版本之前,Rust 出人意料地尝试静态阻止Rc循环。在0.11.0 版本中,对ArcArc和进行了彻底的更改Mutex,但Arc仍然不可变并依赖于Arc<RWLock<T>>模拟Arc的当前行为。奇怪的是,Rc仍然是不可变的。在1.0.0 版本中Rc终于得到了get_mut我们所知道和喜爱的方法。不过,Arc还是靠RwLockArc有点慢,在 1.3.0 中获得功能不稳定get_mut

现在,有趣的一个。怎么了Gc?它在 0.12 版本中被删除因为它的实现很差,令人困惑,并且是当时存在许多过时语言功能的唯一原因,并承诺将来会重新访问垃圾收集器。正如我们现在所知,那从未发生过。

至于您是否可以查看旧文档,是的,您可以。它们都托管在static.rust-lang.org. 只需转到https://static.rust-lang.org/doc/VERSION_NUMBER/CRATE_NAME/index.html,例如https://static.rust-lang.org/doc/0.7/std/index.html