Array Appenders

dsimcha dsimcha at yahoo.com
Mon Apr 6 20:08:22 PDT 2009


Ever since D emerged from the primordial soup back in the Paleozoic Era,
there's been discussion around here about array appending and the need/want
for a capacity field.  To solve this problem, Andrei's pre-release Phobos
includes an array appender struct (see
http://www.erdani.dreamhosters.com/d/web/phobos/std_array.html).  While this
gets the job done, IMHO it feels kind of hackish and undermining of builtin
arrays, especially now that D supports alias this.

When alias this came out (yes, this was just last week but it feels like
forever ago with the pace of evolution lately), I started playing around with
the idea that an ArrayAppender!(T) should consist of an extremely thin wrapper
around a T[].  It should implicitly convert to T[] and be usable exactly like
a T[], except that it should have a capacity field and its ~= operator should
be overridden to use the capacity field for fast appends.  IMHO this is a much
more elegant solution than having an ArrayAppender that is a completely
different animal than builtin arrays and doesn't allow access to the builtin
array's operators without an explicit conversion.

Right now, my prototype of the implicitly-converting ArrayAppender doesn't
work well due to bugs 2777, 2778, and 2781, but if there's sufficient
interest, I'd be willing to release the prototype anyhow for comment after
it's cleaned up a little.  What do others think?  Should arrays w/ capacity
fields blend in with and implicitly convert to builtin arrays, or should there
be a high wall distinguishing the two?



More information about the Digitalmars-d mailing list