6 ms·
> The entire problem here is incorrectly assuming that "A owns B" implies "A has a pointer to B". I don't know if this is a Rust-imposed constraint in some fas
by vvanders 9y ago
> The entire problem here is incorrectly assuming that "A owns B" implies "A has a pointer to B". I don't know if this is a Rust-imposed constraint in some fashion, but it certainly isn't a necessary one.
Rust has support for weak references[1] to support this exact use case.
For 90% of uses cases A owns B tends to produce much cleaner architecture. Having ambiguous ownership is just a recipe for resource leaks and non-deterministic behavior.
[1] https://doc.rust-lang.org/std/rc/struct.Weak.html https://doc.rust-lang.org/std/rc/struct.Weak.html
- mehrdadn 9y agoHmm... that doesn't make sense. Weak references are for refcounted values. There does not need to be any refcounting involved here at all.
- vvanders 9y agoYes but single owner and refcount of 1 are semantically the same. If you want to be strict about this just keep the Rc private to the implementations and only hand out Weak<T>.
- mehrdadn 9y agoSo you're suggesting we add a refcount to every value because it can be made to be semantically the same as not having one?
- vvanders 9y agoIf you want to stay in safe Rust, sure. If that's too much overhead feel free to drop down to unsafe and do it just like in C/C++. FWIW Rc is pretty lightweight. Arc is the heavier(and threadsafe) variant.
- deleted 9y ago[deleted]
- Retra 9y agoThere's no safe, general way to do shared ownership without ref counting or garbage collection. You can't expect Rust to provide one; it already provides ref counting and raw pointers, which is as good as any other Non-GC language does.