On Sat, 25 Apr 2009 20:17:00 -0400, Unknown W. Brackets <unkn...@simplemachines.org> wrote:

Let me say it a different way:

split() returns results that are, often, stored or compared. It is not often that these results are concatenated to or modified. Possibly, they may not be sliced (further) often either.

Such a case represents a perfect example of an array (or string) that need not have a greater capacity than its length. Indeed; no property of the array is likely to change - its length, contents, capacity, or even ptr. All are likely to remain constant until the object is deleted from memory.

So, it would seem to me, this return value (as a quick example) could easily be changed to one that fits the following:

1. Is an array of data.
2. Does not have mutable contents (data.)
3. Does not allow its length or capacity to be extended (excuse me for considering this mutation.)
4. Is a reference, rather than a static array.

My suggestion is that "char[]" should _be_ a StringBuilder, and "int[]" should _be_ an ArrayBuilder, and we should adopt a separate syntax for something that _isn't_ one of those.

That said, I did just browse some of my D source files - an XML 1.0 parser/tree and a custom rfc-compliant ftp server - and nearly the only concatenation I use is building exception strings. I'm a little surprised. Only a couple times do I do anything a builder would be useful for.

One time is on XML child nodes; since I'm building a list of children, it is a "builder" type thing. However, my XML tree is fully incremental - that means you could traverse it before all of the data has been read from the net. It would not be practical for me to use a builder that didn't have proper read access for this case.

I really think using a "StringBuilder" class is just like the solution of using a "String" class. D, in my opinion, proved the latter was not necessary; I hold that the former isn't either.

-[Unknown]

Okay, I understand where you're coming from. Here are some counter-points
1) Immutable strings are often concatenated, which you don't address
2) int[], real[], and basically anything not a string rarely concatenates, but often mutable, which you don't address 3) Rather large thread a while ago concluded the builder overhead was too high for general use. 4) You're proposal makes immutable char[] and char[] have different underlying representations.

Reply via email to