Inability to dup/~ for const arrays of class objects

Jonathan M Davis jmdavisProg at gmx.com
Thu May 30 00:15:25 PDT 2013


On Thursday, May 30, 2013 09:01:06 Maxim Fomin wrote:
> > The article about slices on this site -
> > http://dlang.org/d-array-article.html is perfectly correct.
> 
> No, the article is incorrect in vocabulary because it contradicts
> to the spec definitions, and spec incompletence is not a reason
> to dilute what is already defined. What actually happens is:
> 1) T[] is defined as dynamic array,  PostfixExpression [ ] is
> defined as SliceExpression.
> 2) Array article calls dynamic arrays as slices. Since notion of
> dynamic array is occupied, the article calls GC memory as dynamic
> array. This is a complete contradiction to spec.
> 3) Folks start using these misleading definitions.
> 
> This actually leads to incorrect assumptions, as was pointed out
> previously that dynamic array points only to runtime memory
> (which is not always the case).

Much as I love that article, I really don't like the fact that it tries to 
claim that dynamic arrays and slices are two different things, since they 
aren't. T[] is a dynamic array _and_ a slice, and for the article to be 
completely correct in its terminology, it would actually be incorrect to refer 
to _anything_ in D as a dynamic array, as it would be something completely 
internal to the runtime. T[] would be only a slice, and the type system 
wouldn't have dynamic arrays in it anywhere.

The runtime holds the memory that dynamic arrays / slices refer to, but I 
really wish that that article had not referred to that underlying memory as 
being the dymanic array as opposed to simply a block of memory that the 
runtime gave slices to, letting the slices be referred to as dynamic arrays 
like they are.

I would argue that all dynamic arrays are array slices and vice versa. And 
that's how std.traits.isDynamicArray treats them as well.

- Jonathan M Davis


More information about the Digitalmars-d mailing list