Hi ..... thanks to Aleksi for porting the Python benchmark. However, I get a parse error referring to the line:

count +=1 

when I try to run the  code below on my machine.

I've double checked the code.  Will try again later tonight.


I deeply appreciate the response to my inquiry.

Ken Rhodes



ruby-talk / netlab.co.jp wrote:
>
> > Kenneth Rhodes writes:
> > 
> > > Hi..... I am a Ruby novice, really just a curious inquirer.  I would
> > > appreciate someone translating the attached python sieve benchmark
> > > to RUBY, it would really help me get a handle on the way Ruby is
> > > written.
> 
> Dave: 
> 
> > I didn't unpack your code, but you'll find python, Ruby, perl, and
> > other Sieve benchmarks at:
> > 
> >    http://www.bagley.org/~doug/shootout/bench/sieve/
> > 
> > Click on the language to see the source.
> 
> I became curious a little and thought to translate the original source. I
> wrapped it to a class, but didn't touch the original logic.
> 
>   class Sieve
>     attr_accessor :size, :flags
>     def initialize(size = 500)
>       @size = size
>     end
> 
>     def sieve
>       count = 0
>       @flags = Array.new(@size + 1, true)
>       for i in 1..@size
>         if @flags[i]
>           prime = 2 * i
>           prime = prime + 1
>           start = prime + i
>           start.step(@size, prime) do |k|
>             @flags[k] = false
>           end
>           count += 1
>         end
>       end
>       return count
>     end
>   end
> 
>   def benchmark(sieve, seconds = 15, batch = 50)
>     puts "prime sieve benchmark"
>     cycles = 0
>     t = Time.now
>     while Time.now < t + seconds
>       batch.times do
>         nprimes = sieve.sieve
>         puts "whoops!" unless nprimes == 167
>       end
>       cycles += batch
>     end
>   
>     t = Time.now - t
>     puts "#{cycles / t} sieves per second"
>   
>     print "%3d " % 2
>     1.upto(sieve.size) do |i|
>       print "%3d " % (i*2 + 1) if sieve.flags[i]
>     end
>     puts
>   end
> 
>   benchmark( Sieve.new(size = 500), seconds = 15, batch = 50)
> 
> The results:
> 
> sieve.py: 235.178 sieves per second      (15.11user)
> sieve.rb: 225.616033 sieves per second   (15.02user)
> 
> Lefts me wonder why the Ruby test at Dougs site was dramatically faster than
> Python, but in this version was slightly slower (except that this one used
> less wall clock time :). I don't have time to investigate though.
> 
>     - Aleksi
> 
--
Ken Rhodes


__________________________________________________________________
Get your own FREE, personal Netscape Webmail account today at http://webmail.netscape.com/