On Tue, 24 Nov 2009 15:25:27 -0500, Andrei Alexandrescu <[email protected]> wrote:

Steven Schveighoffer wrote:
Why do we need this scheme then? If it only makes sense to use slicing when you are done appending, then why not use that model with today's rules? Why make code that uses slices before you are finished appending perform poorly? Why make code that uses temporary slices (like I showed in my example) perform poorly?
 -Steve

Oh, I think I understand. I wasn't talking about the current proposal, but instead of your hypothetical Array class (note that I capitalized Array). So probably I caused confusion.

I might be the one causing confusion :) I assumed you were taking the side of "Array should be a separate type from slice" and proposing a method of avoiding hard-to-determine reallocation properties.

But my counter-point is that your method forces users (at least users who care about performance) to avoid slicing in the first place until all appending operations are finished. A common usage of slicing is to temporarily use a read-only view of a portion of an array, as in my example. In that case, you inadvertently triggered a reallocation when none was necessary. While that is a conservative approach, it hinders performance unnecessarily. Basically, in many cases where slicing and appending are interleaved, you will incur an unreasonable performance penalty.

*and* without this scheme, you can achieve the same results by writing your code the way you would have written it if this scheme were in place. In other words, isn't it just enough to recommend "don't slice before you're done appending" instead of inventing weird allocation rules to herd programmers in that direction?

-Steve

Reply via email to