[SVN] r3879 (TextMate)
    Allan Odgaard 
    throw-away-1 at macromates.com
       
    Wed Jun 28 13:48:25 UTC 2006
    
    
  
On 28/6/2006, at 14:46, James Edward Gray II wrote:
> On Jun 28, 2006, at 5:01 AM, Allan Odgaard wrote:
>> • use ‘<<’ instead of ‘+=’ when appending to strings, as the  
>> former is magnitudes faster
> Until GC is triggered...  ;)
I think the problem is that << is a native String method and will  
append to the string using an exponential growing buffer, so if we do:
    1024.times { str << 'a' }
It does log2(1024) re-allocations and full copies of the string.  
Resulting in 10 reallocations and 2048 bytes copied in total.
Though += is not a native string method, so doing:
    1024.times { str += 'a' }
Is equivalent to:
    1024.times { str = str + 'a' }
Here we do 1024 reallocations (one in each iteration), and thus copy  
the entire string as well, resulting in (1024*1023)/2 or 523,776  
bytes copied in total.
So the first is O(n) in the size of the resulting string, where the  
latter os O(n^2).
    
    
More information about the textmate-dev
mailing list