On May 18, 2011, at 5:07 PM, Piotr Szturmaj wrote: > Sean Kelly wrote: >> >> On May 18, 2011, at 8:00 AM, Piotr Szturmaj wrote: >> >>> Sean Kelly wrote: >>>> On May 17, 2011, at 2:37 PM, Piotr Szturmaj wrote: >>>>> >>>>> But couldn't Fiber's stack be scanned for references to itself and >>>>> readjusted? >>>> >>>> Without type information, there's no way to be sure that something is >>>> actually a reference, so corruption could occur. >>> >>> Then, how GC scan Fiber's stack for references? I thought some portion of >>> GC code could be used for this. >> >> The GC is conservative. If it encounters a value that matches the address >> of GCed memory, it won't collect the memory. > > Ok. Maybe a requirement that cloneable fiber's function must be marked as > @safe would work, as @safe functions can't take the address of a local > variable or function parameter. Also asm and pointer arithmetic are > prohibited. This way Fiber's stack can't have references to itself. > > That should be enough to implement ForwardRange's save() for generators. Or > still, I'm missing something I don't know yet :)
Referenced classes would still be shared between fibers. I don't know if that would be an issue or not.