Reference counted containers prototype

jdrewsen jdrewsen at nospam.com
Mon Dec 26 13:24:27 PST 2011


On Monday, 26 December 2011 at 17:25:12 UTC, Andrei Alexandrescu 
wrote:
> Hello,
>
>
> I've been playing with a new approach to reference counting, in 
> particular for the containers library.
>
> A small prototype is at http://pastebin.com/WnSQY1Jw. The 
> prototype features a simple doubly-linked list implementation 
> DListImpl. That is not supposed to be manipulated directly (or 
> it might, in case the user wants a simple garbage collected 
> implementation - this is a point in the discussion).
>
> DListImpl has only a couple of primitives implemented. The only 
> interesting points that it tries to make are:
>
> (a) the presence of the dispose() primitive, which deallocates 
> all memory and brings the object back to its .init state
>
> (b) the presence of the dup() primitive, which creates a 
> full-blown duplicate of the object.
>
> The interesting part of the sample is RefImpl, which has a 
> couple of quite interesting details:
>
> (a) All interaction with the held object is done via 
> opDispatch. In fact opDispatch can be engineered to statically 
> enforce no reference to the held object escapes.
>
> (b) A const/immutable call against a non-existing is silently 
> converted into a call against a default-initialized object.
>
> (c) If a call works and returns the same type for a non-const 
> and a const object, then the const version is preferred. This 
> is to reduce the number of calls to ensureUnique().
>
> Destroy.
>
> Andrei

Maybe the fact that the container is duplicated on opDispatch 
call time and not on assignment time could be confusing to at 
least developers coming from c++. It does benefit from lazy 
duplication by doing it this way which might justify it.

Otherwise it seems good.

/Jonas




More information about the Digitalmars-d mailing list