[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: copy-on-write (was: globals considered harmful)
> However, there may be some clever trick to implement COW efficiently.
> Sounds like a Ph.D. thesis to me... :-)
I sent a message about NewtonScript and copy-on-write on the 12th, but it
doesn't look like it got through :(.
How about a blend of indirect access and the pointer redirection. Only use
indirect access for objects that use copy-on-write (i.e. objects that still
inherit some slots from a prototype). Once an object's slots are all copied,
you redirect the pointers once to the new object.
For example, make a stub object with an inheriting slot to the COW object.
This object inherits from the prototype and grows new slots as needed. You
guarantee that the only pointer to the COW object is the stub, this way, you
don't need to use addSlotsIfAbsent:, you can just make a new object, copy the
old slots, and reassign the stub's pointer to the new object. When the COW
object copies the last slot, you do a define: to make the stub effectively
become the COW object.
This gives you the benefit of COW objects when you need them, at the expense
of indirect access.
-- Bill Burdick