The demise of T[new]
downs
default_357-line at yahoo.de
Sun Oct 18 19:24:00 PDT 2009
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 think ArrayBuilder can work almost entirely transparently provided the following conditions are met:
1) when trying to cat to an array, the first array automatically promotes to ArrayBuilder
2) Setting .length is, depending on new length, either a slice or a cat operation with the length difference.
2) ArrayBuilders implicitly cast to string.
This should allow a syntax that is almost entirely identical to the one used in D1, aside from typeof("a"~"b").stringof :)
Is this feasible in D2?
More information about the Digitalmars-d
mailing list