我很好奇这两个模块在实践中有什么区别?如果没有,那为什么会有这两个重复的模块呢?
std::rc::Rc
只是alloc::rc::Rc
的重新导出。您可以在src/std/lib.rs中看到整个rc
模块被重新导出:pub use alloc::rc;
alloc
创建用于任何类型的内存分配。引用计数、箱式、原始分配和一般访问底层分配器(通常是Rust中的jemalloc
)。由于Rc
类型是如此常见,应该存在于标准库中,但alloc
crate不应该是标准库的一部分,因此只有alloc
crate的rc
模块被重新导出到标准库中。这样就使用户不必关心alloc
crate,并提供了一个干净的标准库,没有不舒适使用的奇怪东西。
core
、alloc
、collections
等)更加灵活,因此低级别用户(如内核编写者)可以挑选适用于其上下文环境的箱;另一方面,对于用户来说,拥有一个单一的箱(std
)更加方便。 - Matthieu M.