operator+ is now efficient (potentially more so than using a StringBuilder if 
you can do it all in one statement). operator+= still sucks, and I don't think 
we came up with an obvious way to get good performance with the same syntax. 
One possibility: we could add operator+=(String&) to StringBuilder rather than 
String. Then you could use the sugary operator syntax with the efficient class.

Regards,
Maciej

On Sep 4, 2012, at 4:27 PM, Dirk Schulze <dschu...@adobe.com> wrote:

> I thought we had efforts to make String::operator+= use StringBuilder 
> somehow? I can remember that we had a discussion on webkit-dev and definitely 
> on bugzilla about improving String::operator+= instead of replacing it with 
> StringBuilder.
> 
> Greetings,
> Dirk
> 
> On Sep 4, 2012, at 4:22 PM, Adam Barth <aba...@webkit.org> wrote:
> 
>> As part of the work to deploy efficient string patterns [1] throughout
>> WebKit, Benjamin and I noticed a bunch of very inefficient code that
>> uses operator+= with Strings:
>> 
>> String foo;
>> for (...)
>> foo += [...];
>> return foo;
>> 
>> This pattern is particularly inefficient because += mallocs an
>> entirely new buffer for the result and copies the the string into the
>> new buffer.  That means that this pattern makes O(n) calls to malloc
>> and does O(n^2) work.  A more efficient pattern is to use
>> StringBuilder:
>> 
>> StringBuilder foo;
>> for (...)
>> foo.append([...]);
>> return foo.toString();
>> 
>> I'm in the process of going through WebCore and removing all callers
>> of WTF::String::operator+=.  Once that's complete, my plan is to
>> remove WTF::String::operator+= from WTFString.h.  Hopefully that will
>> nudge contributors and reviewers towards more efficient string
>> patterns.
>> 
>> Removing operator+= will likely require changes to a number of
>> port-specific files.  I'll do my best to remove these, but I might
>> need some help from maintainers of individual ports.  If you're
>> interested in helping out, please let me know.
>> 
>> Many thanks,
>> Adam
>> 
>> [1] http://trac.webkit.org/wiki/EfficientStrings
>> _______________________________________________
>> webkit-dev mailing list
>> webkit-dev@lists.webkit.org
>> http://lists.webkit.org/mailman/listinfo/webkit-dev
> 
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> http://lists.webkit.org/mailman/listinfo/webkit-dev

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to