Ok.... this is my first attempt at using callcc in ruby.  The code
is not what I would call beautiful, but should be readable...(??).
Suggestions are most welcome!


#!/usr/bin/env ruby
# vim:et:ts=4:sw=4

$n = 0 if $DEBUG

class RLWP
    def initalize
        @nxt = nil
    end
    attr_accessor :nxt
    def makecont
        passesleft, message = callcc { |cont|
            return cont
        }
        if passesleft <= 0
            puts $n if $DEBUG
            exit 0
        end
        $n += 1 if $DEBUG
        @nxt.call(passesleft - 1, message)
    end
end

def run(n, cycles, msg)
    process = Array.new(n) { RLWP.new }
    cont = process.collect { |p| p.makecont }
    process.each_with_index { |p,i| p.nxt = cont[(i+1) % n] }
    cont[0].call(n * cycles, msg)
end

run ARGV[0].to_i, ARGV[1].to_i, "xyzzy"




tom@molly:~/src/quiz-135% time ruby -d quiz-135-callcc.rb 1000 1000
1000000
ruby -d quiz-135-callcc.rb 1000 1000 10.781 user 0.037 system 99% cpu 10.868 total
tom@molly:~/src/quiz-135% 


At somewhere around 12000 processes ruby started crashing on my system,
maybe a memory issue?

tom@molly:~/src/quiz-135% time ruby quiz-135-callcc.rb 12000 3
[2]    30579 illegal hardware instruction (core dumped)  ruby quiz-135-callcc.rb 12000 3
ruby quiz-135-callcc.rb 12000 3 1.695 user 0.713 system 32% cpu 7.418 total
tom@molly:~/src/quiz-135%



regards,
-tom