Description
This might be very difficult but I think it is worth considering how the GC can work with closures.
Currently moving a Gc
into a closure causes problems because it can't be found in the trace. Also it will probably cause a panic on cleanup if the closure is stored in a GCed object because it will be rooted which will cause assert!(finalizer_safe())
to trigger.
I don't know if it would be possible to add support for tracing closures, I'm pretty sure this isn't possible in current Rust but maybe a compiler plugin could accomplish it. That being said some "tracing" traits aren't implemented for closure (Debug) but that might be for another reason.
There are other problems as well. Due to moving being so transparent there is no way to mark a "field" as #[unsafe_ignore_trace]
if you want to capture a non-Gc containing object as well. This seems like it would make it impossible to choose the right "default".
That being said it would be very nice to be able to close over values and have them automatically traced if something could be worked out.