On 02/12/2013 05:25 PM, Christian Tismer wrote:
Ropes have been implemented by Carl-Friedrich Bolz in 2007 as I remember.
No idea what the impact was, if any at all.
Would ropes be an answer (and a simple way to cope with string mutation
patterns) as an alternative implementation, and therefore still justify
the usage of that pattern?

I've always hated the "".join(array) idiom for "fast" string concatenation--it's ugly and it flies in the face of TOOWTDI.  I think everyone should use "x = a + b + c + d" for string concatenation, and we should just make that fast.

In 2006 I proposed "lazy string concatenation", a sort of rope that hid the details inside the string object.  If a and b are strings, a+b returned a string object that internally lazily contained references to a and b, and only computed its value if you asked for it.  Here's the Unicode version:
http://bugs.python.org/issue1629305
Why didn't it get accepted?  I lumped in lazy slicing, a bad move as it was more controversial.  That and the possibility that macros like PyUnicode_AS_UNICODE could now possibly fail, which would have meant checking 400+ call sites to ensure they handle the possibility of failure.  This latter work has already happened with the new efficient Unicode representation patch.

I keep thinking it's time to revive the lazy string concatenation patch.


/arry