Hacker News new | ask | show | jobs
by smasher164 812 days ago
Another approach is to use a Gc<T> smart pointer: https://docs.rs/gc/latest/gc/

I've used this in an interpreter and it's quite convenient.

3 comments

Yes, garbage collection seems to be the only viable solution for dealing with spaghetti reference graphs in their full generality, including possible cycles. In that context it's worth trying a high-performance concurrent GC implementation such as https://github.com/chc4/samsara Samsara.
That is just using a RefCell under the hood[1] so it is effectively the same trade-offs as the RefCell example from the article.

[1]https://docs.rs/gc/0.5.0/src/gc/lib.rs.html#495-498

It doesn't require you to differentiate weak and strong references, so there's no risk of memory leaks due incorrect choice in Gc, unlike Rc IIUC.
Note: the two of you are linking to different crates. Samsara provides a Gc type, but it is not the gc crate.
It looks like you intended to say that on the sibling comment.
Yep! Sorry.
Nice! This seems way more appealing than every other approach I've seen in this domain.