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