Reference counted containers prototype

Jonathan M Davis jmdavisProg at gmx.com
Tue Dec 27 00:24:00 PST 2011


On Monday, December 26, 2011 20:47:50 Andrei Alexandrescu wrote:
> On 12/26/11 11:25 AM, Andrei Alexandrescu wrote:
> [snip]
> 
> > Destroy.
> 
> Walter indeed just destroyed me over the phone: I conflated reference
> counting with copy-on-write. Essentially instead of defining a reference
> type that's garbage-collected, I defined a value type that has cow.

That would explain a few things. ensureUnique is a rather bizarre thing to 
have just for reference counting.

> Which is not bad! Check out the quick fix at http://pastebin.com/HHw06qrc.
> 
> With that, cow is a sheer policy. With the magic of opDispatch it looks
> like we can define reference counted containers _and_ value containers -
> all in very little code.
> 
> The perspectives here are extremely exciting. The question remains how
> to best package this awesome array of options to maximize coherence. So
> we have:
> 
> 1. "Basic" containers - reference semantics, using classic garbage
> collection
> 
> 2. Reference counted containers - still reference semantics, using
> reference counting
> 
> 3. COW containers - value semantics, using reference counting to make
> copying O(1).
> 
> How to we provide an Apple-style nice wrapping to all of the above?

I'd be inclined to argue that reference counting and COW should be kept 
separate as opposed to being different versions of the same type simply to make 
it easier to understand. Not to mention, how often is COW needed for 
containers? It's useful for many things, but it's only useful for value-type 
containers, and the use cases for value-type containers are fairly limited I 
should think. I'm sure that they're very useful under certain circumstances, 
but as has been pointed out in the past, the fact that C++ defaults to having 
value-type containers is a big problem. So, I don't think that it's a bad 
thing to make it possible to have value-type containers and/or COW containers, 
but if they're going to seriously complicate things, then they should be 
separate IMHO. They're more specialized as opposed to being the normal use 
case.

By the way, I'm surprised to see the use of delete in that code, since delete 
is supposed to be going away.

- Jonathan M Davis


More information about the Digitalmars-d mailing list