top | item 39831384

(no title)

smasher164 | 1 year 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.

discuss

order

zozbot234|1 year ago

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.

celeritascelery|1 year ago

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

rendaw|1 year ago

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.

paholg|1 year ago

Note: the two of you are linking to different crates. Samsara provides a Gc type, but it is not the gc crate.

foldr|1 year ago

Nice! This seems way more appealing than every other approach I've seen in this domain.