I would recommend using strings, but you can assign them to local variables 
then reuse these.

a = 'a'
...
while...
str << a

There is no doubt we also need to optimize literal strings but this can be done 
in another (separate) test.

Laurent

On May 27, 2010, at 1:39 PM, Jordan Breeding wrote:

> Good point, what if I change to appending binary info?
> 
> str << 1
> 
> vs.
> 
> str << "1"
> 
> On May 27, 2010, at 15:37, Laurent Sansonetti wrote:
> 
>> Hi Jordan,
>> 
>> The perf suite is far to be completed but we will definitely cover most 
>> String methods there at some point. In the meantime, your tests have some 
>> side effects I'm afraid (literal strings in loops are object creations).
>> 
>> Laurent
>> 
>> On May 26, 2010, at 9:09 PM, Jordan Breeding wrote:
>> 
>>> Right now MacRuby is really quite slow for string operations, I noticed it 
>>> a while back when doing large amounts of string creation, characters 
>>> swapping, and pushing/popping strings into/out of a priority queue.
>>> 
>>> The attached file is a string performance test and here is a run on my 15" 
>>> Core i7 MBP with ruby 1.9.1, jruby, and MacRuby:
>>> 
>>> Name                ruby 1.9.1p378      MacRuby version     jruby 1.5.0.RC1 
>>>     
>>> --------------------------------------------------------------------------------
>>> array:<<            0.751082            1.168693            1.290000        
>>>     
>>> array:new           0.394997            1.917601            0.277000        
>>>     
>>> array:[]            0.324454            0.755054            0.472000        
>>>     
>>> array:[]=           1.691840            0.765225            0.822000        
>>>     
>>> hash:new            1.501595            4.563549            0.444000        
>>>     
>>> hash:[]             0.612701            1.051502            0.589000        
>>>     
>>> hash:[]=            2.012367            1.135856            0.902000        
>>>     
>>> ivar:get            0.215424            0.344873            1.087000        
>>>     
>>> ivar:set            1.349466            0.243909            1.902000        
>>>     
>>> ivar:attr_writer    1.245894            4.587488            0.655000        
>>>     
>>> ivar:attr_reader    1.045779            2.755303            0.482000        
>>>     
>>> loop:upto           1.211598            5.215169            0.874000        
>>>     
>>> loop:times          1.210781            5.215054            0.876000        
>>>     
>>> loop:while          0.599330            0.157019            0.937000        
>>>     
>>> loop:for            1.442154            0.811875            1.132000        
>>>     
>>> method:args         0.728248            0.682097            1.434000        
>>>     
>>> method:noarg        0.822463            0.578383            0.837000        
>>>     
>>> method:splat        0.478610            1.805760            0.227000        
>>>     
>>> method:empty        0.807405            0.527851            1.062000        
>>>     
>>> method:opt          1.027146            2.579715            0.944000        
>>>     
>>> misc:ao_bench       7.838053            8.529954            3.248000        
>>>     
>>> misc:sudoku         1.740196            2.172581            2.461000        
>>>     
>>> misc:tak            1.277399            0.155534            1.563000        
>>>     
>>> misc:mandelbrot     2.956319            0.124588            0.854000        
>>>     
>>> misc:fib            3.827194            0.574900            4.935000        
>>>     
>>> misc:ack            1.049100            0.116299            1.217000        
>>>     
>>> proc:call+splat     0.318346            1.119665            0.191000        
>>>     
>>> proc:call+args      2.477112            1.100848            2.995000        
>>>     
>>> proc:call+noarg     2.496278            1.071953            3.507000        
>>>     
>>> string:store swap   0.153784            0.479202            0.033000        
>>>     
>>> string:<<           0.481788            143.615735          0.099000        
>>>     
>>> string:new          0.276954            1.574715            0.207000        
>>>     
>>> string:[]           0.428182            1.899233            0.072000        
>>>     
>>> string:tuple swap   0.181318            0.721778            0.045000        
>>>     
>>> yield:noarg         0.783281            0.720254            1.269000        
>>>     
>>> yield:splat         0.159219            0.965713            0.094000        
>>>     
>>> yield:less_arity    0.192418            0.843867            0.345000        
>>>     
>>> yield:same_arity    0.937823            0.763344            1.547000        
>>>     
>>> yield:more_arity    0.192516            0.848179            0.421000
>>> 
>>> Jordan
>>> 
>>> <perf_string.rb>_______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel@lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel@lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to