[Python-ideas] Create a StringBuilder class and use it everywhere

Stefan Behnel stefan_ml at behnel.de
Thu Aug 25 18:58:01 CEST 2011


k_bx, 25.08.2011 17:28:
> I don't mind using u''.join, but it just doesn't make people think about speed at all.

When I see something like a StringBuilder, I guess the first thing I'd 
wonder about is why the programmer didn't just use StringIO() or even just 
''.join(). That makes the code appear much more magic than it eventually 
turns out to be when looking closer. Plus, it's doomed to be slower, simply 
because it goes through more indirections.

You may be right that using StringIO won't make people think about speed. 
Somebody who doesn't know it would likely go: "oh, that's nice - writing to 
a string as if it were a file - I get that". So it tells you what it does, 
instead of distracting you into thinking about performance implications. 
That's the beauty of it.

Optimisations are just that: optimisations. They are orthogonal to what the 
code does - or at least they should be. Even string concatenation can 
preform just fine in many cases.


> The most popular (as from what I can see) thing right now where people start seeing
> that += is slow is when they try to do that on PyPy (which doesn't have hack like CPython,
> who is still slow) and ask "why my pypy code is sooooo slow".

Sounds like yet another reason not to do it then.

Seriously, there are hardly any language runtimes out there where continued 
string concatenation is efficient, let alone guaranteed to be so. You just 
shouldn't expect that it is. The optimisation in CPython was simply done 
because it *can* be done, so that simple cases (and stupid benchmarks) can 
continue to use simple concatenation and still be efficient. Well, in some 
cases at least.

Stefan




More information about the Python-ideas mailing list