A new top-level question: since Lucy will use reference counting, how will you deal with cycles?
You could try to ensure the Lucy core doesn't create cycles of its own, but.... since the host language is involved, a cycle could easily reach out to the host language and wrap back around into Lucy? Mike On Fri, Mar 27, 2009 at 8:21 AM, Michael McCandless <[email protected]> wrote: > On Fri, Mar 27, 2009 at 1:08 AM, Marvin Humphrey <[email protected]> > wrote: > >> I think I have an approach that's going to allow us to eliminate FastObj: We >> lazily create the host object, and treat a NULL host_obj as semantically >> equivalent to a refcount of 1. > > Much of this is beyond me, but... won't there be multiple references > in C to a given Lucy object, each of which would need to incRef the > RC? > > Expanding on/restating my "sort of like autoboxing" idea...: what if > the Lucy obj never held onto the reference to the mirror host obj? > (And the Lucy obj did its own reference counting, separately from the > host's GC). > > But, the reverse is allowed (the host can hold onto the Lucy mirror > obj that has incRef's (refers to) the Lucy obj). > > When we cross the bridge, Lucy to host, we would make a new host > wrapper obj each time. These host mirror objs are very lightweight > wrappers, right? When that call returns across the bridge, Lucy drops > the reference to it. > > The host is allowed to keep a reference somewhere to that host mirror > obj, and later cross the bridge in the reverse direction, using it. > > Note that Lucy can still clearly store "other" host objects. It's > just these 'thin host mirrors Lucy object" objects that would not be > retained in Lucy. > > This then breaks the circular ref, and gives complete freedom for Lucy > to do whatever GC it needs, separate from the Host's GC. > > But what do we lost by not retaining a permanent host obj wrapper? > (Note that if it's a real performance problem, then in certain cases > you could eg explicitly retain a reference at the top of the loop, do > the loop, then drop the reference at the end). > > Mike >
