From: Hugh Sasse Date: 2010-03-05T02:51:36+09:00 Subject: [ruby-core:28478] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer On Fri, 5 Mar 2010, Yusuke ENDOH wrote: > Hi, > > 2010/3/5 Hugh Sasse : > > Yes (last time I looked), but while this sort of thing is > > being looked at I'd like to remind people of the cunning code inside > > Lua for handling large string concatenations: > > > > http://www.lua.org/pil/11.6.html > > > At first glance, the document explains the difference of destructive > and non-destructive concatenations, like String#+ and #<<. > > It is absolutely different topic from pre-allocation. It is related: the algorithm constructs large strings from smaller ones in an elegant way using a "tower of Hanoi", and if the top string concatenation gets bigger than the one below it, only then are they joined together. Result is less copying and merging. Admittedly, it is less applicable with mutable strings, but while only the top of the tower is modified, there'd be less churn in memory. Hugh