On Tue, 27 Dec 2011 03:47:50 +0100, Andrei Alexandrescu <seewebsiteforem...@erdani.org> 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.

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

Creating a final class wrapper using opDispatch and a value container
as a field might be an option that mixes well with the other wrappers.

2. Reference counted containers - still reference semantics, using reference counting

Can't this be merged with std.typecons.RefCounted?

3. COW containers - value semantics, using reference counting to make copying O(1).

If it works correctly this is a fully transparent COW wrapper, never seen anything like that in C++.
It deserves to be a separate wrapper in std.typecons or so.

How to we provide an Apple-style nice wrapping to all of the above?


Andrei


Implementing containers as value types with deep-copy and
providing the three wrappers seems the most flexible approach.
The are applications where values are sufficient, e.g. global lists.

for the naming:
struct DListImpl; // public
alias ClassWrapper!DListImpl DList;

optionally add aliases:

alias RefCounted!DListImpl RefCountedDList;
alias CopyOnWrite!DListImpl CopyOnWriteDList;

Given that it would be used consistently across the whole
std.container modules it's an easy scheme to learn.

Reply via email to