On Sat, 29 Sep 2007, Vasyl Smirnov wrote:

> Hi,
>
> I'm new to Ruby, and I've just tried to measure it's performance
> compared to Python, and got some interesting results.
>
> The Ruby test script is:
>
> #!/usr/bin/env ruby
>
> s = ""
> i = 0
> while line = gets
>  s += line
>  i += 1
>  puts(i) if i % 1000 == 0
> end
>
> and the Python one:
>
> #!/usr/bin/env python
>
> import sys
>
> s = ""
> i = 0
> for line in sys.stdin:
>  s += line
>  i += 1
>  if i % 1000 == 0: print i
>
>
> I fed a 1MB-large file as input to each of this script. The strange
> thing is that the Ruby version starts to output progress slower and
> slower as the s string grows. The Python version went smoothly.

This is because "string" + "otherstring" allocates a new string, 
"stringotherstring".

Use << instead, and it will concatenate "otherstring" to the orignal 
"string".

s = ""
i = 0
while line = gets
  s << line
  i += 1
  puts(i) if i % 1000 == 0
end

Performance should be a lot better with that version.


Kirk Haines