--UlVJffcvxoiEqYs2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Thu, Apr 03, 2003 at 12:51:28AM +0900, Greg Brondo wrote:
> Here they are:
Cheers. I've run them here under FreeBSD-4.7 running on a Sony Vaio laptop,
Pentium 266MMX. For the data file, I'm using:
$ wc /usr/share/dict/words
235881 235881 2493066 /usr/share/dict/words
(with an average line length of only 10.6 bytes it's perhaps not the most
realistic example, but it will do)
Running the code you gave, I get the following times averaged over three
runs:
Ruby (1.6.8) 6.81 secs
Ruby (1.8.0p2) 6.57 secs
Python (2.2.1) 6.72 secs *
Java (jdk-1.3.1p6_4) 16.76 secs **
* it printed "Elapsed ", so the time given is using the 'time' command;
this is slightly unfair to python as it includes the interpreter start-up
time which the Ruby time doesn't.
** printed "Elapsed 6", ditto
Note however that I am running under X, and it seems quite a lot of time is
spent just writing the progress messages to the xterm. If I add '>/dev/null'
to the end of the command line and use unix 'time' then I get:
Ruby (1.6.8) 3.8 s
Ruby (1.8.0p2) 3.4 s
Python (2.2.1) 3.7 s
Java (jdk-1.3.1p6_4) 8.6 s
So on this basis Ruby stacks up pretty well against the languages you
mention, running under Unix. From your figures it seems that Ruby is slower
under Windows, and I would guess that this is somehow related to the way
Ruby performs I/O, or perhaps to the threading support (e.g. making extra
calls to select() before I/O operations). Maybe a Windows developer could
compare the Python and Ruby I/O source code and see if there are significant
differences in the way they talk to Windows.
Out of interest, I also ported your code to Perl (attached), and also
modified the Ruby code to use a more iterative style to be closer to Perl. I
get:
(to screen) (to /dev/null)
Perl (5.005_03) 3.9 secs 2.3 secs
Ruby (1.6.8) 6.5 secs 3.6 secs
So it seems that Perl is significantly faster in this simple test, but also
the block/yield approach does not by itself add a great deal of overhead
(fortunately!)
Regards,
Brian.
--UlVJffcvxoiEqYs2
Content-Type: application/x-perl
Content-Disposition: attachment; filename="x.pl"
Content-Transfer-Encoding: quoted-printable
my $filename=$ARGV[0];
my $lc = 0;
my $starttime = time;
open FILE,"<$filename";
while (<FILE>) {
$lc++;
if ($lc % 1000 == 0) {
print "Read $lc lines\n"
}
}
my $stoptime = time;
print "Elapsed = ", ($stoptime - $starttime), "\n"
--UlVJffcvxoiEqYs2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="x2.rb"
filename ¨ÂÖÛ°Ý
lc
starttime ime.now.to_f
f ile.open(filename)
while f.gets
lc +
if lc % 1000 0
puts "Read #{lc} lines"
end
end
stoptime ime.now.to_f
puts "Elapsed + (stoptime - starttime).to_s
--UlVJffcvxoiEqYs2--