On Sunday, 27 July 2014 at 12:03:05 UTC, Jonathan M Davis wrote:
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
This very thread is a testament to the fact that no, it's not
completely hidden, and it is the conflation that causes
confusion, and clarity only comes when the two concepts are
explained separately.
This matches my experience when I teach about D's arrays on IRC
too - people generally feel enlightened after reading the array
article.
It's debatable whether hamfisting dynamic array capabilities onto
a simple slice type was a good idea or not (T[new], anyone?), but
we should be as clear with the current situation as possible.
Pretending there isn't a problem is ignoring the cries of D
newbies everywhere. Please stop.