RFC: naming for FrontTransversal and Transversal ranges

Rainer Deyke rainerd at eldwood.com
Sat May 2 19:14:59 PDT 2009

Robert Jacques wrote:
> On Sat, 02 May 2009 19:11:11 -0400, Rainer Deyke <rainerd at eldwood.com>
> wrote:
>> Given a value type 'T', you have the guarantee that no two variables of
>> type 'T' can alias each other.  This guarantee is preserved when the
>> type 'T' is non-copyable.
>> An argument of type 'ref T' can obviously alias a variable of type 'T'.
> Okay, if T is not copyable, then I _must_ pass it as ref T, everywhere.
> Which is reference semantics.

When passing arguments, (possibly const) ref is a reasonable default.  I
don't care about how arguments are passed.  I care about aliasing
between variables, especially member variables.

With reference semantics, two variables of type T can reference each
other.  With non-copyable types, they cannot.

>>>>   - RAII.
>>> Can be done with structs or classes. Also see point 1. So, this isn't a
>>> pro/con either way.
>> The D1 dynamic array type does not support RAII.
> There are two parts to D's arrays. One a struct 2 words long, the other
> is a chunk of ram. The first part is RAII, the second part is not
> possible, since D doesn't allow dynamically sized memory allocation on
> the stack.

It's meaningless to talk about RAII in the context of the "struct" part
of a D1 dynamic array, since it doesn't manage any resources.  If I
place a variable of a RAII type in a D1 dynamic array, it is not
properly destroyed when the array goes out of scope.  Therefore D1
dynamic arrays do not support RAII.

Stack versus heap allocation is an orthogonal issue.

Rainer Deyke - rainerd at eldwood.com

More information about the Digitalmars-d mailing list