Andrei Alexandrescu Wrote: > Leandro Lucarella wrote: > > Andrei Alexandrescu, el 17 de noviembre a las 18:45 me escribiste: > >>> 3. If you **really** care about performance, you should only append when > >>> you > >>> don't know the length in advance. If you know the length, you should > >>> always > >>> pre-allocate. > >> We will have collections and all those good things, but I don't see > >> how the proposal follows from the feedback. My perception is that > >> this is a group of people who use D. Bartosz' concern didn't cause > >> quite a riot, so as far as I can tell there is no big issue at > >> stake. > > > > I didn't say anything (until now) because this was discussed already. > > Dynamic arrays/slices appending is horribly broken (I know it's well > > defined, and deterministic, but you are just condemned to make mistakes, > > it just doesn't work as one would expect, even when you know how it works > > you have to keep fighting your intuition all the time). > > In which ways do you think arrays horribly broken? Same as Bartosz mentions? > > One question is whether you actually have had bugs and problems coding, > or if arrays stopped you from getting work done. >
What Leandro points out is that using D arrays is not straightforward and may present a steep learning curve. In particular, even the beginner would be required to understand section 4.1.9 of TDPL (Expanding). For many people arrays' behavior might be counter-intuitive and a source of mistakes. In fact, even after reading 4.1.9 I don't know what to expect in some cases. Here's an example: int[] a = [0]; auto b = a; a ~= 1; b ~= 2; What is a[1]? Is this considered "stomping" and requiring a re-allocation?
