On Sunday, 27 July 2014 at 09:10:26 UTC, Jakob Ovrum wrote:
On Sunday, 27 July 2014 at 08:49:43 UTC, Jonathan M Davis wrote:
As defined by the language, T[] is a dynamic array. As great
as the article is, it was wrong in its use of the terminology,
and that's what's caused a lot of the confusion and resulted
in arguments over the difference between a dynamic array and a
slice (there really isn't any). IIRC, both Walter and Andrei
stated in that discussion that T[] is a dynamic array as far
as D is concerned and that's not going to change. The article
really should be updated to reflect the correct terminology.
As far as D is concerned a slice and a dynamic array are the
same thing when it comes to arrays. They're just different
names for T[], and trying to treat them as different just
causes confusion.
Conflating both concepts with the same name is why the article
was so dearly needed in the first place.
Except that no concepts are being conflated. T[] is the dynamic
array. There's a block of memory managed by the GC underneath,
but it's completely hidden from the programmer. It is _not_ the
dynamic array. It's just a block of memory managed by the GC
which is used to manage the memory for dynamic arrays, and it has
a completely different type from T[]. It's not even an array in
the D sense. The block of memory is referred to by a pointer, not
a D array.
It's talk of "which array" owns the memory and the like which
causes confusion, and talking about the GC-managed block of
memory as being the dynamic array and the T[] that the programmer
sees as being the slice is just plain wrong. The T[] is both a
slice and a dynamic array (because they're the same thing),
whereas the block of memory is neither. I think that the fact
that the article tried to call the underlying block of memory a
dynamic array has caused a lot of unnecessary confusion.
- Jonathan M Davis