3 ms·
Just look at the code in cargo. (A)rc is all over the place. It's essentially a cop out to not have to think about ownership and lifetime, and not have to worr
by mgaunard 4y ago
Just look at the code in cargo. (A)rc is all over the place.
It's essentially a cop out to not have to think about ownership and lifetime, and not have to worry about the borrow checker.
The fact that this is so pervasive throughout Rust code is for me a sign that Rust failed to deliver on its initial promise. The borrow checker was meant to be its main value added. But heh, people still find value added to Rust otherwise.
- tialaramex 4y agoHmm. So the code I happened to have open was Aria's "Cargo mommy" which has neither Arc nor Rc anywhere, but is only a toy. So I did go look at Cargo itself, but unlike you although I do see some use of Rc and fewer of Arc it was scarcely "all over the place" when I looked and in the cases I spent any time actually thinking about it's a shared value, so, yeah, that makes sense. I randomly looked at cargo/core/profiles.rs and cargo/core/registry.rs and cargo/core/compiler/compilation.rs without finding either Rc or Arc used in those files at all. Searching across the whole repository I found some places which do use Rc, and fewer using Arc (implying this data is shared between threads) -- but this doesn't really support your original claim does it?
- mgaunard 4y agoI never meant cargo itself.
- zozbot234 4y ago> It's essentially a cop out to not have to think about ownership and lifetime Not a cop out. Something very much like Rc<> is needed whenever an object's lifecycle might be independently extended by multiple referencing "owners", none of which is subsumed by the others. That's a matter of broad high-level design that can't generally be avoided, least of all in a multi-threaded context (as shown by the use of Arc<>).