copy-on-write (was: globals considered harmful)

Bill Burdick burdick at
Fri Mar 25 06:20:08 UTC 1994

> However, there may be some clever trick to implement COW efficiently.
> Sounds like a Ph.D. thesis to me... :-)
> -Urs

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
	burdick at

More information about the Self-interest mailing list