Walter Bright wrote:
The purpose of T[new] was to solve the problems T[] had with passing T[]
to a function and then the function resizes the T[]. What happens with
the original?
The solution we came up with was to create a third array type, T[new],
which was a reference type.
Andrei had the idea that T[new] could be dispensed with by making a
"builder" library type to handle creating arrays by doing things like
appending, and then delivering a finished T[] type. This is similar to
what std.outbuffer and std.array.Appender do, they just need a bit of
refining.
The .length property of T[] would then become an rvalue only, not an
lvalue, and ~= would no longer be allowed for T[].
We both feel that this would simplify D, make it more flexible, and
remove some awkward corner cases like the inability to say a.length++.
What do you think?
I remember seeing a lot of CTFE code that created a dynamic array and
then appended stuff to it, like for example to build a list of prime
numbers. Would that still work with ArrayBuilder?