mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* Merge YARV
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									3e7566d8fb
								
							
						
					
					
						commit
						a3e1b1ce7e
					
				
					 233 changed files with 46004 additions and 13653 deletions
				
			
		
							
								
								
									
										15
									
								
								benchmark/bm_app_answer.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								benchmark/bm_app_answer.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
def ack(m, n)
 | 
			
		||||
  if m == 0 then
 | 
			
		||||
    n + 1
 | 
			
		||||
  elsif n == 0 then
 | 
			
		||||
    ack(m - 1, 1)
 | 
			
		||||
  else
 | 
			
		||||
    ack(m - 1, ack(m, n - 1))
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def the_answer_to_life_the_universe_and_everything
 | 
			
		||||
  (ack(3,7).to_s.split(//).inject(0){|s,x| s+x.to_i}.to_s + "2" ).to_i
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
answer = the_answer_to_life_the_universe_and_everything
 | 
			
		||||
							
								
								
									
										11
									
								
								benchmark/bm_app_factorial.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								benchmark/bm_app_factorial.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
def fact(n)
 | 
			
		||||
  if(n > 1)
 | 
			
		||||
    n * fact(n-1)
 | 
			
		||||
  else
 | 
			
		||||
    1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
8.times{
 | 
			
		||||
  fact(5000)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								benchmark/bm_app_fib.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								benchmark/bm_app_fib.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
def fib n
 | 
			
		||||
  if n < 3
 | 
			
		||||
    1
 | 
			
		||||
  else
 | 
			
		||||
    fib(n-1) + fib(n-2)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
fib(34)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								benchmark/bm_app_mandelbrot.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								benchmark/bm_app_mandelbrot.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
require 'complex'
 | 
			
		||||
 | 
			
		||||
def mandelbrot? z
 | 
			
		||||
  i = 0
 | 
			
		||||
  while i<100
 | 
			
		||||
    i+=1
 | 
			
		||||
    z = z * z
 | 
			
		||||
    return false if z.abs > 2
 | 
			
		||||
  end
 | 
			
		||||
  true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ary = []
 | 
			
		||||
 | 
			
		||||
(0..100).each{|dx|
 | 
			
		||||
  (0..100).each{|dy|
 | 
			
		||||
    x = dx / 50.0
 | 
			
		||||
    y = dy / 50.0
 | 
			
		||||
    c = Complex(x, y)
 | 
			
		||||
    ary << c if mandelbrot?(c)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										259
									
								
								benchmark/bm_app_pentomino.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								benchmark/bm_app_pentomino.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,259 @@
 | 
			
		|||
#!/usr/local/bin/ruby
 | 
			
		||||
# This program is contributed by Shin Nishiyama
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# modified by K.Sasada
 | 
			
		||||
 | 
			
		||||
NP = 5
 | 
			
		||||
ROW = 8 + NP
 | 
			
		||||
COL = 8
 | 
			
		||||
 | 
			
		||||
$p = []
 | 
			
		||||
$b = []
 | 
			
		||||
$no = 0
 | 
			
		||||
 | 
			
		||||
def piece(n, a, nb)
 | 
			
		||||
  nb.each{|x|
 | 
			
		||||
    a[n] = x
 | 
			
		||||
    if n == NP-1
 | 
			
		||||
      $p << [a.sort]
 | 
			
		||||
    else
 | 
			
		||||
      nbc=nb.clone
 | 
			
		||||
      [-ROW, -1, 1, ROW].each{|d|
 | 
			
		||||
        if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
 | 
			
		||||
          nbc << x+d
 | 
			
		||||
        end
 | 
			
		||||
      }
 | 
			
		||||
      nbc.delete x
 | 
			
		||||
      piece(n+1,a[0..n],nbc)
 | 
			
		||||
    end
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def kikaku(a)
 | 
			
		||||
  a.collect {|x| x - a[0]}
 | 
			
		||||
end
 | 
			
		||||
def ud(a)
 | 
			
		||||
  kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
 | 
			
		||||
end
 | 
			
		||||
def rl(a)
 | 
			
		||||
  kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
 | 
			
		||||
end
 | 
			
		||||
def xy(a)
 | 
			
		||||
  kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def mkpieces
 | 
			
		||||
  piece(0,[],[0])
 | 
			
		||||
  $p.each do |a|
 | 
			
		||||
    a0 = a[0]
 | 
			
		||||
    a[1] = ud(a0)
 | 
			
		||||
    a[2] = rl(a0)
 | 
			
		||||
    a[3] = ud(rl(a0))
 | 
			
		||||
    a[4] = xy(a0)
 | 
			
		||||
    a[5] = ud(xy(a0))
 | 
			
		||||
    a[6] = rl(xy(a0))
 | 
			
		||||
    a[7] = ud(rl(xy(a0)))
 | 
			
		||||
    a.sort!
 | 
			
		||||
    a.uniq!
 | 
			
		||||
  end
 | 
			
		||||
  $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def mkboard
 | 
			
		||||
  (0...ROW*COL).each{|i|
 | 
			
		||||
    if i % ROW >= ROW-NP
 | 
			
		||||
      $b[i] = -2
 | 
			
		||||
    else
 | 
			
		||||
      $b[i] = -1
 | 
			
		||||
    end
 | 
			
		||||
    $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def pboard
 | 
			
		||||
  return # skip print
 | 
			
		||||
  print "No. #$no\n"
 | 
			
		||||
  (0...COL).each{|i|
 | 
			
		||||
    print "|"
 | 
			
		||||
    (0...ROW-NP).each{|j|
 | 
			
		||||
      x = $b[i*ROW+j]
 | 
			
		||||
      if x < 0
 | 
			
		||||
        print "..|"
 | 
			
		||||
      else
 | 
			
		||||
        printf "%2d|",x+1
 | 
			
		||||
      end
 | 
			
		||||
    }
 | 
			
		||||
    print "\n"
 | 
			
		||||
  }
 | 
			
		||||
  print "\n"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
$pnum=[]
 | 
			
		||||
def setpiece(a,pos)
 | 
			
		||||
  if a.length == $p.length then
 | 
			
		||||
    $no += 1
 | 
			
		||||
    pboard
 | 
			
		||||
    return
 | 
			
		||||
  end
 | 
			
		||||
  while $b[pos] != -1
 | 
			
		||||
    pos += 1
 | 
			
		||||
  end
 | 
			
		||||
  ($pnum - a).each do |i|
 | 
			
		||||
    $p[i].each do |x|
 | 
			
		||||
      f = 0
 | 
			
		||||
      x.each{|s|
 | 
			
		||||
        if $b[pos+s] != -1
 | 
			
		||||
          f=1
 | 
			
		||||
          break
 | 
			
		||||
        end
 | 
			
		||||
      }
 | 
			
		||||
      if f == 0 then
 | 
			
		||||
        x.each{|s|
 | 
			
		||||
          $b[pos+s] = i
 | 
			
		||||
        }
 | 
			
		||||
        a << i
 | 
			
		||||
        setpiece(a.clone, pos)
 | 
			
		||||
        a.pop
 | 
			
		||||
        x.each{|s|
 | 
			
		||||
          $b[pos+s] = -1
 | 
			
		||||
        }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
mkpieces
 | 
			
		||||
mkboard
 | 
			
		||||
$p[4] = [$p[4][0]]
 | 
			
		||||
$pnum = (0...$p.length).to_a
 | 
			
		||||
setpiece([],0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
# original
 | 
			
		||||
 | 
			
		||||
NP = 5
 | 
			
		||||
ROW = 8 + NP
 | 
			
		||||
COL = 8
 | 
			
		||||
 | 
			
		||||
$p = []
 | 
			
		||||
$b = []
 | 
			
		||||
$no = 0
 | 
			
		||||
 | 
			
		||||
def piece(n,a,nb)
 | 
			
		||||
  for x in nb
 | 
			
		||||
    a[n] = x
 | 
			
		||||
    if n == NP-1
 | 
			
		||||
      $p << [a.sort]
 | 
			
		||||
    else
 | 
			
		||||
      nbc=nb.clone
 | 
			
		||||
      for d in [-ROW, -1, 1, ROW]
 | 
			
		||||
        if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
 | 
			
		||||
          nbc << x+d
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      nbc.delete x
 | 
			
		||||
      piece(n+1,a[0..n],nbc)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def kikaku(a)
 | 
			
		||||
  a.collect {|x| x - a[0]}
 | 
			
		||||
end
 | 
			
		||||
def ud(a)
 | 
			
		||||
  kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
 | 
			
		||||
end
 | 
			
		||||
def rl(a)
 | 
			
		||||
  kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
 | 
			
		||||
end
 | 
			
		||||
def xy(a)
 | 
			
		||||
  kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def mkpieces
 | 
			
		||||
  piece(0,[],[0])
 | 
			
		||||
  $p.each do |a|
 | 
			
		||||
    a0 = a[0]
 | 
			
		||||
    a[1] = ud(a0)
 | 
			
		||||
    a[2] = rl(a0)
 | 
			
		||||
    a[3] = ud(rl(a0))
 | 
			
		||||
    a[4] = xy(a0)
 | 
			
		||||
    a[5] = ud(xy(a0))
 | 
			
		||||
    a[6] = rl(xy(a0))
 | 
			
		||||
    a[7] = ud(rl(xy(a0)))
 | 
			
		||||
    a.sort!
 | 
			
		||||
    a.uniq!
 | 
			
		||||
  end
 | 
			
		||||
  $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def mkboard
 | 
			
		||||
  for i in 0...ROW*COL
 | 
			
		||||
    if i % ROW >= ROW-NP
 | 
			
		||||
      $b[i] = -2
 | 
			
		||||
    else
 | 
			
		||||
      $b[i] = -1
 | 
			
		||||
    end
 | 
			
		||||
    $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def pboard
 | 
			
		||||
  print "No. #$no\n"
 | 
			
		||||
  for i in 0...COL
 | 
			
		||||
    print "|"
 | 
			
		||||
    for j in 0...ROW-NP
 | 
			
		||||
      x = $b[i*ROW+j]
 | 
			
		||||
      if x < 0
 | 
			
		||||
        print "..|"
 | 
			
		||||
      else
 | 
			
		||||
        printf "%2d|",x+1
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    print "\n"
 | 
			
		||||
  end
 | 
			
		||||
  print "\n"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
$pnum=[]
 | 
			
		||||
def setpiece(a,pos)
 | 
			
		||||
  if a.length == $p.length then
 | 
			
		||||
    $no += 1
 | 
			
		||||
    pboard
 | 
			
		||||
    return
 | 
			
		||||
  end
 | 
			
		||||
  while $b[pos] != -1
 | 
			
		||||
    pos += 1
 | 
			
		||||
  end
 | 
			
		||||
  ($pnum - a).each do |i|
 | 
			
		||||
    $p[i].each do |x|
 | 
			
		||||
      f = 0
 | 
			
		||||
      for s in x do
 | 
			
		||||
        if $b[pos+s] != -1
 | 
			
		||||
          f=1
 | 
			
		||||
          break
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      if f == 0 then
 | 
			
		||||
        for s in x do
 | 
			
		||||
          $b[pos+s] = i
 | 
			
		||||
        end
 | 
			
		||||
        a << i
 | 
			
		||||
        setpiece(a.clone, pos)
 | 
			
		||||
        a.pop
 | 
			
		||||
        for s in x do
 | 
			
		||||
          $b[pos+s] = -1
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
mkpieces
 | 
			
		||||
mkboard
 | 
			
		||||
$p[4] = [$p[4][0]]
 | 
			
		||||
$pnum = (0...$p.length).to_a
 | 
			
		||||
setpiece([],0)
 | 
			
		||||
							
								
								
									
										8
									
								
								benchmark/bm_app_raise.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								benchmark/bm_app_raise.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<300000
 | 
			
		||||
  i+=1
 | 
			
		||||
  begin
 | 
			
		||||
    raise
 | 
			
		||||
  rescue
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										5
									
								
								benchmark/bm_app_strconcat.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								benchmark/bm_app_strconcat.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<500000
 | 
			
		||||
  "#{1+1} #{1+1} #{1+1}"
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										13
									
								
								benchmark/bm_app_tak.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								benchmark/bm_app_tak.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
 | 
			
		||||
def tak x, y, z
 | 
			
		||||
  unless y < x
 | 
			
		||||
    z
 | 
			
		||||
  else
 | 
			
		||||
    tak( tak(x-1, y, z),
 | 
			
		||||
         tak(y-1, z, x),
 | 
			
		||||
         tak(z-1, x, y))
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
tak(18, 9, 0)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								benchmark/bm_app_tarai.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								benchmark/bm_app_tarai.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
def tarai( x, y, z )
 | 
			
		||||
  if x <= y
 | 
			
		||||
  then y
 | 
			
		||||
  else tarai(tarai(x-1, y, z),
 | 
			
		||||
             tarai(y-1, z, x),
 | 
			
		||||
             tarai(z-1, x, y))
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
tarai(12, 6, 0)
 | 
			
		||||
							
								
								
									
										1
									
								
								benchmark/bm_loop_times.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								benchmark/bm_loop_times.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
30000000.times{|e|}
 | 
			
		||||
							
								
								
									
										4
									
								
								benchmark/bm_loop_whileloop.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								benchmark/bm_loop_whileloop.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
i = 0
 | 
			
		||||
while i<30000000 # benchmark loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										5
									
								
								benchmark/bm_loop_whileloop2.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								benchmark/bm_loop_whileloop2.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								benchmark/bm_so_ackermann.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								benchmark/bm_so_ackermann.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: ackermann-ruby.code,v 1.4 2004/11/13 07:40:41 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
 | 
			
		||||
def ack(m, n)
 | 
			
		||||
    if m == 0 then
 | 
			
		||||
        n + 1
 | 
			
		||||
    elsif n == 0 then
 | 
			
		||||
        ack(m - 1, 1)
 | 
			
		||||
    else
 | 
			
		||||
        ack(m - 1, ack(m, n - 1))
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
NUM = 9
 | 
			
		||||
ack(3, NUM)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								benchmark/bm_so_array.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								benchmark/bm_so_array.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: ary-ruby.code,v 1.4 2004/11/13 07:41:27 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
# with help from Paul Brannan and Mark Hubbart
 | 
			
		||||
 | 
			
		||||
n = 9000 # Integer(ARGV.shift || 1)
 | 
			
		||||
 | 
			
		||||
x = Array.new(n)
 | 
			
		||||
y = Array.new(n, 0)
 | 
			
		||||
 | 
			
		||||
n.times{|bi|
 | 
			
		||||
  x[bi] = bi + 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
(0 .. 999).each do |e|
 | 
			
		||||
  (n-1).step(0,-1) do |bi|
 | 
			
		||||
    y[bi] += x.at(bi)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# puts "#{y.first} #{y.last}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								benchmark/bm_so_concatenate.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								benchmark/bm_so_concatenate.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: strcat-ruby.code,v 1.4 2004/11/13 07:43:28 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
# based on code from Aristarkh A Zagorodnikov and Dat Nguyen
 | 
			
		||||
 | 
			
		||||
STUFF = "hello\n"
 | 
			
		||||
i=0
 | 
			
		||||
while i<10
 | 
			
		||||
  i+=1
 | 
			
		||||
  hello = ''
 | 
			
		||||
  400000.times do |e|
 | 
			
		||||
    hello << STUFF
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# puts hello.length
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								benchmark/bm_so_count_words.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								benchmark/bm_so_count_words.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: wc-ruby.code,v 1.4 2004/11/13 07:43:32 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
# with help from Paul Brannan
 | 
			
		||||
 | 
			
		||||
input = open(File.join(File.dirname($0), 'wc.input'), 'rb')
 | 
			
		||||
 | 
			
		||||
nl = nw = nc = 0
 | 
			
		||||
while true
 | 
			
		||||
  data = (input.read(4096) or break) << (input.gets || "")
 | 
			
		||||
  nc += data.length
 | 
			
		||||
  nl += data.count("\n")
 | 
			
		||||
  ((data.strip! || data).tr!("\n", " ") || data).squeeze!
 | 
			
		||||
  #nw += data.count(" ") + 1
 | 
			
		||||
end
 | 
			
		||||
# STDERR.puts "#{nl} #{nw} #{nc}"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										61
									
								
								benchmark/bm_so_exception.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								benchmark/bm_so_exception.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: except-ruby.code,v 1.4 2004/11/13 07:41:33 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
 | 
			
		||||
$HI = 0
 | 
			
		||||
$LO = 0
 | 
			
		||||
NUM = 250000 # Integer(ARGV[0] || 1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Lo_Exception < Exception
 | 
			
		||||
  def initialize(num)
 | 
			
		||||
    @value = num
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
class Hi_Exception < Exception
 | 
			
		||||
  def initialize(num)
 | 
			
		||||
    @value = num
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def some_function(num)
 | 
			
		||||
  begin
 | 
			
		||||
    hi_function(num)
 | 
			
		||||
  rescue
 | 
			
		||||
    print "We shouldn't get here, exception is: #{$!.type}\n"
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def hi_function(num)
 | 
			
		||||
  begin
 | 
			
		||||
    lo_function(num)
 | 
			
		||||
  rescue Hi_Exception
 | 
			
		||||
    $HI = $HI + 1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def lo_function(num)
 | 
			
		||||
  begin
 | 
			
		||||
    blowup(num)
 | 
			
		||||
  rescue Lo_Exception
 | 
			
		||||
    $LO = $LO + 1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def blowup(num)
 | 
			
		||||
  if num % 2 == 0
 | 
			
		||||
    raise Lo_Exception.new(num)
 | 
			
		||||
  else
 | 
			
		||||
    raise Hi_Exception.new(num)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
i = 1
 | 
			
		||||
max = NUM+1
 | 
			
		||||
while i < max
 | 
			
		||||
  i+=1
 | 
			
		||||
  some_function(i+1)
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										47
									
								
								benchmark/bm_so_lists.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								benchmark/bm_so_lists.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
#from http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby
 | 
			
		||||
 | 
			
		||||
NUM = 100
 | 
			
		||||
SIZE = 10000
 | 
			
		||||
 | 
			
		||||
def test_lists()
 | 
			
		||||
  # create a list of integers (Li1) from 1 to SIZE
 | 
			
		||||
  li1 = (1..SIZE).to_a
 | 
			
		||||
  # copy the list to li2 (not by individual items)
 | 
			
		||||
  li2 = li1.dup
 | 
			
		||||
  # remove each individual item from left side of li2 and
 | 
			
		||||
  # append to right side of li3 (preserving order)
 | 
			
		||||
  li3 = Array.new
 | 
			
		||||
  while (not li2.empty?)
 | 
			
		||||
    li3.push(li2.shift)
 | 
			
		||||
  end
 | 
			
		||||
  # li2 must now be empty
 | 
			
		||||
  # remove each individual item from right side of li3 and
 | 
			
		||||
  # append to right side of li2 (reversing list)
 | 
			
		||||
  while (not li3.empty?)
 | 
			
		||||
    li2.push(li3.pop)
 | 
			
		||||
  end
 | 
			
		||||
  # li3 must now be empty
 | 
			
		||||
  # reverse li1 in place
 | 
			
		||||
  li1.reverse!
 | 
			
		||||
  # check that first item is now SIZE
 | 
			
		||||
  if li1[0] != SIZE then
 | 
			
		||||
    p "not SIZE"
 | 
			
		||||
    0
 | 
			
		||||
  else
 | 
			
		||||
    # compare li1 and li2 for equality
 | 
			
		||||
    if li1 != li2 then
 | 
			
		||||
      return(0)
 | 
			
		||||
    else
 | 
			
		||||
      # return the length of the list
 | 
			
		||||
      li1.length
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
i = 0
 | 
			
		||||
while i<NUM
 | 
			
		||||
  i+=1
 | 
			
		||||
  result = test_lists()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
result
 | 
			
		||||
							
								
								
									
										48
									
								
								benchmark/bm_so_matrix.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								benchmark/bm_so_matrix.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: matrix-ruby.code,v 1.4 2004/11/13 07:42:14 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
 | 
			
		||||
n = 60 #Integer(ARGV.shift || 1)
 | 
			
		||||
 | 
			
		||||
size = 30
 | 
			
		||||
 | 
			
		||||
def mkmatrix(rows, cols)
 | 
			
		||||
    count = 1
 | 
			
		||||
    mx = Array.new(rows)
 | 
			
		||||
    (0 .. (rows - 1)).each do |bi|
 | 
			
		||||
        row = Array.new(cols, 0)
 | 
			
		||||
        (0 .. (cols - 1)).each do |j|
 | 
			
		||||
            row[j] = count
 | 
			
		||||
            count += 1
 | 
			
		||||
        end
 | 
			
		||||
        mx[bi] = row
 | 
			
		||||
    end
 | 
			
		||||
    mx
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def mmult(rows, cols, m1, m2)
 | 
			
		||||
    m3 = Array.new(rows)
 | 
			
		||||
    (0 .. (rows - 1)).each do |bi|
 | 
			
		||||
        row = Array.new(cols, 0)
 | 
			
		||||
        (0 .. (cols - 1)).each do |j|
 | 
			
		||||
            val = 0
 | 
			
		||||
            (0 .. (cols - 1)).each do |k|
 | 
			
		||||
                val += m1.at(bi).at(k) * m2.at(k).at(j)
 | 
			
		||||
            end
 | 
			
		||||
            row[j] = val
 | 
			
		||||
        end
 | 
			
		||||
        m3[bi] = row
 | 
			
		||||
    end
 | 
			
		||||
    m3
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
m1 = mkmatrix(size, size)
 | 
			
		||||
m2 = mkmatrix(size, size)
 | 
			
		||||
mm = Array.new
 | 
			
		||||
n.times do
 | 
			
		||||
    mm = mmult(size, size, m1, m2)
 | 
			
		||||
end
 | 
			
		||||
# puts "#{mm[0][0]} #{mm[2][3]} #{mm[3][2]} #{mm[4][4]}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										24
									
								
								benchmark/bm_so_nested_loop.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								benchmark/bm_so_nested_loop.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: nestedloop-ruby.code,v 1.4 2004/11/13 07:42:22 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
# from Avi Bryant
 | 
			
		||||
 | 
			
		||||
n = 16 # Integer(ARGV.shift || 1)
 | 
			
		||||
x = 0
 | 
			
		||||
n.times do
 | 
			
		||||
    n.times do
 | 
			
		||||
        n.times do
 | 
			
		||||
            n.times do
 | 
			
		||||
                n.times do
 | 
			
		||||
                    n.times do
 | 
			
		||||
                        x += 1
 | 
			
		||||
                    end
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
# puts x
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										56
									
								
								benchmark/bm_so_object.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								benchmark/bm_so_object.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# $Id: objinst-ruby.code,v 1.4 2004/11/13 07:42:25 bfulgham Exp $
 | 
			
		||||
# http://www.bagley.org/~doug/shootout/
 | 
			
		||||
# with help from Aristarkh Zagorodnikov
 | 
			
		||||
 | 
			
		||||
class Toggle
 | 
			
		||||
    def initialize(start_state)
 | 
			
		||||
        @bool = start_state
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def value
 | 
			
		||||
        @bool
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def activate
 | 
			
		||||
        @bool = !@bool
 | 
			
		||||
        self
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
class NthToggle < Toggle
 | 
			
		||||
    def initialize(start_state, max_counter)
 | 
			
		||||
        super start_state
 | 
			
		||||
        @count_max = max_counter
 | 
			
		||||
        @counter = 0
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def activate
 | 
			
		||||
        @counter += 1
 | 
			
		||||
        if @counter >= @count_max
 | 
			
		||||
            @bool = !@bool
 | 
			
		||||
            @counter = 0
 | 
			
		||||
        end
 | 
			
		||||
        self
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
n = 1500000 # (ARGV.shift || 1).to_i
 | 
			
		||||
 | 
			
		||||
toggle = Toggle.new 1
 | 
			
		||||
5.times do
 | 
			
		||||
    toggle.activate.value ? 'true' : 'false'
 | 
			
		||||
end
 | 
			
		||||
n.times do
 | 
			
		||||
    toggle = Toggle.new 1
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ntoggle = NthToggle.new 1, 3
 | 
			
		||||
8.times do
 | 
			
		||||
    ntoggle.activate.value ? 'true' : 'false'
 | 
			
		||||
end
 | 
			
		||||
n.times do
 | 
			
		||||
    ntoggle = NthToggle.new 1, 3
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								benchmark/bm_so_random.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								benchmark/bm_so_random.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
# from http://www.bagley.org/~doug/shootout/bench/random/random.ruby
 | 
			
		||||
 | 
			
		||||
IM = 139968.0
 | 
			
		||||
IA = 3877.0
 | 
			
		||||
IC = 29573.0
 | 
			
		||||
 | 
			
		||||
$last = 42.0
 | 
			
		||||
 | 
			
		||||
def gen_random(max)
 | 
			
		||||
  (max * ($last = ($last * IA + IC) % IM)) / IM
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
N = 1000000
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<N
 | 
			
		||||
  i+=1
 | 
			
		||||
  gen_random(100.0)
 | 
			
		||||
end
 | 
			
		||||
# "%.9f" % gen_random(100.0)
 | 
			
		||||
							
								
								
									
										24
									
								
								benchmark/bm_so_sieve.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								benchmark/bm_so_sieve.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
# from http://www.bagley.org/~doug/shootout/bench/sieve/sieve.ruby
 | 
			
		||||
num = 40
 | 
			
		||||
count = i = j = 0
 | 
			
		||||
flags0 = Array.new(8192,1)
 | 
			
		||||
k = 0
 | 
			
		||||
while k < num
 | 
			
		||||
  k+=1
 | 
			
		||||
  count = 0
 | 
			
		||||
  flags = flags0.dup
 | 
			
		||||
  i = 2
 | 
			
		||||
  while i<8192
 | 
			
		||||
    i+=1
 | 
			
		||||
    if flags[i]
 | 
			
		||||
      # remove all multiples of prime: i
 | 
			
		||||
      j = i*i
 | 
			
		||||
      while j < 8192
 | 
			
		||||
        j += i
 | 
			
		||||
        flags[j] = nil
 | 
			
		||||
      end
 | 
			
		||||
      count += 1
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
count
 | 
			
		||||
							
								
								
									
										10
									
								
								benchmark/bm_vm1_block.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								benchmark/bm_vm1_block.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
def m
 | 
			
		||||
  yield
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<30000000 # while loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
  m{
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										8
									
								
								benchmark/bm_vm1_const.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								benchmark/bm_vm1_const.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
Const = 1
 | 
			
		||||
 | 
			
		||||
i = 0
 | 
			
		||||
while i<30000000 # while loop 1
 | 
			
		||||
  i+= 1
 | 
			
		||||
  j = Const
 | 
			
		||||
  k = Const
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										11
									
								
								benchmark/bm_vm1_ensure.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								benchmark/bm_vm1_ensure.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<30000000 # benchmark loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
  begin
 | 
			
		||||
    begin
 | 
			
		||||
    ensure
 | 
			
		||||
    end
 | 
			
		||||
  ensure
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								benchmark/bm_vm1_length.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								benchmark/bm_vm1_length.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
a = 'abc'
 | 
			
		||||
b = [1, 2, 3]
 | 
			
		||||
i=0
 | 
			
		||||
while i<30000000 # while loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
  a.length
 | 
			
		||||
  b.length
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								benchmark/bm_vm1_rescue.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								benchmark/bm_vm1_rescue.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<30000000 # while loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
  begin
 | 
			
		||||
  rescue
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										9
									
								
								benchmark/bm_vm1_simplereturn.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								benchmark/bm_vm1_simplereturn.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
def m
 | 
			
		||||
  return 1
 | 
			
		||||
end
 | 
			
		||||
i=0
 | 
			
		||||
while i<30000000 # while loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
  m
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								benchmark/bm_vm1_swap.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								benchmark/bm_vm1_swap.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
a = 1
 | 
			
		||||
b = 2
 | 
			
		||||
i=0
 | 
			
		||||
while i<30000000 # while loop 1
 | 
			
		||||
  i+=1
 | 
			
		||||
  a, b = b, a
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								benchmark/bm_vm2_array.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								benchmark/bm_vm2_array.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  i+=1
 | 
			
		||||
  a = [1,2,3,4,5,6,7,8,9,10]
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										9
									
								
								benchmark/bm_vm2_method.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								benchmark/bm_vm2_method.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
def m
 | 
			
		||||
  nil
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  i+=1
 | 
			
		||||
  m; m; m; m; m; m; m; m;
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										20
									
								
								benchmark/bm_vm2_poly_method.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								benchmark/bm_vm2_poly_method.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
class C1
 | 
			
		||||
  def m
 | 
			
		||||
    1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
class C2
 | 
			
		||||
  def m
 | 
			
		||||
    2
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
o1 = C1.new
 | 
			
		||||
o2 = C2.new
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  o = (i % 2 == 0) ? o1 : o2
 | 
			
		||||
  o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										20
									
								
								benchmark/bm_vm2_poly_method_ov.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								benchmark/bm_vm2_poly_method_ov.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
class C1
 | 
			
		||||
  def m
 | 
			
		||||
    1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
class C2
 | 
			
		||||
  def m
 | 
			
		||||
    2
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
o1 = C1.new
 | 
			
		||||
o2 = C2.new
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  o = (i % 2 == 0) ? o1 : o2
 | 
			
		||||
#  o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										14
									
								
								benchmark/bm_vm2_proc.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								benchmark/bm_vm2_proc.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
def m &b
 | 
			
		||||
  b
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
pr = m{
 | 
			
		||||
  a = 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  i+=1
 | 
			
		||||
  pr.call
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								benchmark/bm_vm2_regexp.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								benchmark/bm_vm2_regexp.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
i=0
 | 
			
		||||
str = 'xxxhogexxx'
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  /hoge/ =~ str
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										12
									
								
								benchmark/bm_vm2_send.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								benchmark/bm_vm2_send.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
class C
 | 
			
		||||
  def m
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
o = C.new
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  i+=1
 | 
			
		||||
  o.__send__ :m
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										20
									
								
								benchmark/bm_vm2_super.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								benchmark/bm_vm2_super.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
 | 
			
		||||
class C
 | 
			
		||||
  def m
 | 
			
		||||
    1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
class CC < C
 | 
			
		||||
  def m
 | 
			
		||||
    super()
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
obj = CC.new
 | 
			
		||||
 | 
			
		||||
i = 0
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  obj.m
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										8
									
								
								benchmark/bm_vm2_unif1.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								benchmark/bm_vm2_unif1.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
i = 0
 | 
			
		||||
def m a, b
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  i+=1
 | 
			
		||||
  m 100, 200
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										20
									
								
								benchmark/bm_vm2_zsuper.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								benchmark/bm_vm2_zsuper.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
i = 0
 | 
			
		||||
 | 
			
		||||
class C
 | 
			
		||||
  def m a
 | 
			
		||||
    1
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
class CC < C
 | 
			
		||||
  def m a
 | 
			
		||||
    super
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
obj = CC.new
 | 
			
		||||
 | 
			
		||||
while i<6000000 # benchmark loop 2
 | 
			
		||||
  obj.m 10
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										6
									
								
								benchmark/bm_vm3_thread_create_join.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								benchmark/bm_vm3_thread_create_join.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<1000 # benchmark loop 3
 | 
			
		||||
  i+=1
 | 
			
		||||
  Thread.new{
 | 
			
		||||
  }.join
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										57
									
								
								benchmark/bmx_temp.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								benchmark/bmx_temp.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
 | 
			
		||||
i=0
 | 
			
		||||
while i<20000000
 | 
			
		||||
  x = 1 # "foo"
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
class Range
 | 
			
		||||
  def each
 | 
			
		||||
    f = self.first
 | 
			
		||||
    l = self.last
 | 
			
		||||
    while f < l
 | 
			
		||||
      yield
 | 
			
		||||
      f = f.succ
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
(0..10000000).each{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
class Fixnum_
 | 
			
		||||
  def times
 | 
			
		||||
    i = 0
 | 
			
		||||
    while i<self
 | 
			
		||||
      yield(i)
 | 
			
		||||
      i+=1
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
10000000.times{
 | 
			
		||||
}
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
ths = (1..10).map{
 | 
			
		||||
  Thread.new{
 | 
			
		||||
    1000000.times{
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
ths.each{|e|
 | 
			
		||||
  e.join
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
$pr = proc{}
 | 
			
		||||
def m
 | 
			
		||||
  $pr.call
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
1000000.times{|e|
 | 
			
		||||
  m
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								benchmark/other-lang/ack.pl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								benchmark/other-lang/ack.pl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
use integer;
 | 
			
		||||
 | 
			
		||||
sub Ack {
 | 
			
		||||
    return $_[0] ? ($_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1))
 | 
			
		||||
		    : Ack($_[0]-1, 1))
 | 
			
		||||
	: $_[1]+1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $NUM = 9;
 | 
			
		||||
$NUM = 1 if ($NUM < 1);
 | 
			
		||||
my $ack = Ack(3, $NUM);
 | 
			
		||||
							
								
								
									
										16
									
								
								benchmark/other-lang/ack.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								benchmark/other-lang/ack.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
import sys
 | 
			
		||||
sys.setrecursionlimit(5000000)
 | 
			
		||||
 | 
			
		||||
def Ack(M, N):
 | 
			
		||||
    if (not M):
 | 
			
		||||
        return( N + 1 )
 | 
			
		||||
    if (not N):
 | 
			
		||||
        return( Ack(M-1, 1) )
 | 
			
		||||
    return( Ack(M-1, Ack(M, N-1)) )
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    NUM = 9
 | 
			
		||||
    sys.setrecursionlimit(10000)
 | 
			
		||||
    Ack(3, NUM)
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
							
								
								
									
										12
									
								
								benchmark/other-lang/ack.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								benchmark/other-lang/ack.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
def ack(m, n)
 | 
			
		||||
    if m == 0 then
 | 
			
		||||
        n + 1
 | 
			
		||||
    elsif n == 0 then
 | 
			
		||||
        ack(m - 1, 1)
 | 
			
		||||
    else
 | 
			
		||||
        ack(m - 1, ack(m, n - 1))
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
NUM = 9
 | 
			
		||||
ack(3, NUM)
 | 
			
		||||
							
								
								
									
										7
									
								
								benchmark/other-lang/ack.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								benchmark/other-lang/ack.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
(define (ack m n)
 | 
			
		||||
  (cond ((zero? m) (+ n 1))
 | 
			
		||||
	((zero? n) (ack (- m 1) 1))
 | 
			
		||||
	(else      (ack (- m 1) (ack m (- n 1))))))
 | 
			
		||||
 | 
			
		||||
(ack 3 9)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										66
									
								
								benchmark/other-lang/eval.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								benchmark/other-lang/eval.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
 | 
			
		||||
Bench = %w(
 | 
			
		||||
  loop
 | 
			
		||||
  ack
 | 
			
		||||
  fib
 | 
			
		||||
  tak
 | 
			
		||||
  fact
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
Lang = <<EOP.map{|l| l.strip}
 | 
			
		||||
  ruby-cyg
 | 
			
		||||
  ../../../test6/miniruby
 | 
			
		||||
  perl
 | 
			
		||||
  python
 | 
			
		||||
  gosh
 | 
			
		||||
EOP
 | 
			
		||||
 | 
			
		||||
Bench.replace ['loop2']
 | 
			
		||||
Lang.replace ['ruby-cyg']
 | 
			
		||||
 | 
			
		||||
Ext = %w(
 | 
			
		||||
  .rb
 | 
			
		||||
  .rb
 | 
			
		||||
  .pl
 | 
			
		||||
  .py
 | 
			
		||||
  .scm
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
p Bench
 | 
			
		||||
p Lang
 | 
			
		||||
 | 
			
		||||
require 'benchmark'
 | 
			
		||||
 | 
			
		||||
def bench cmd
 | 
			
		||||
  m = Benchmark.measure{
 | 
			
		||||
    #p cmd
 | 
			
		||||
    system(cmd)
 | 
			
		||||
  }
 | 
			
		||||
  [m.utime, m.real]
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Result = []
 | 
			
		||||
Bench.each{|b|
 | 
			
		||||
  r = []
 | 
			
		||||
  Lang.each_with_index{|l, idx|
 | 
			
		||||
    cmd = "#{l} #{b}#{Ext[idx]}"
 | 
			
		||||
    r << bench(cmd)
 | 
			
		||||
  }
 | 
			
		||||
  Result << r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
require 'pp'
 | 
			
		||||
# utime
 | 
			
		||||
puts Lang.join("\t")  
 | 
			
		||||
Bench.each_with_index{|b, bi|
 | 
			
		||||
  print b, "\t"
 | 
			
		||||
  puts Result[bi].map{|e| e[0]}.join("\t")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# rtime
 | 
			
		||||
puts Lang.join("\t")  
 | 
			
		||||
Bench.each_with_index{|b, bi|
 | 
			
		||||
  print b, "\t"
 | 
			
		||||
  puts Result[bi].map{|e| e[1]}.join("\t")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								benchmark/other-lang/fact.pl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								benchmark/other-lang/fact.pl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
sub fact{
 | 
			
		||||
  my $n = @_[0];
 | 
			
		||||
  if($n < 2){
 | 
			
		||||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
  else{
 | 
			
		||||
    return $n * fact($n-1);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for($i=0; $i<10000; $i++){
 | 
			
		||||
  &fact(100);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								benchmark/other-lang/fact.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								benchmark/other-lang/fact.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#import sys
 | 
			
		||||
#sys.setrecursionlimit(1000)
 | 
			
		||||
 | 
			
		||||
def factL(n):
 | 
			
		||||
	r = 1
 | 
			
		||||
	for x in range(2, n):
 | 
			
		||||
		r *= x
 | 
			
		||||
	return r
 | 
			
		||||
 | 
			
		||||
def factR(n):
 | 
			
		||||
	if n < 2:
 | 
			
		||||
		return 1
 | 
			
		||||
	else:
 | 
			
		||||
		return n * factR(n-1)
 | 
			
		||||
 | 
			
		||||
for i in range(10000):
 | 
			
		||||
	factR(100)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								benchmark/other-lang/fact.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								benchmark/other-lang/fact.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
def fact(n)
 | 
			
		||||
  if n < 2
 | 
			
		||||
    1
 | 
			
		||||
  else
 | 
			
		||||
    n * fact(n-1)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
i=0
 | 
			
		||||
while i<10000
 | 
			
		||||
  i+=1
 | 
			
		||||
  fact(100)
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										8
									
								
								benchmark/other-lang/fact.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								benchmark/other-lang/fact.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
(define (fact n)
 | 
			
		||||
        (if (< n 2)
 | 
			
		||||
            1
 | 
			
		||||
          (* n (fact (- n 1)))))
 | 
			
		||||
 | 
			
		||||
(dotimes (i 10000)
 | 
			
		||||
  (fact 100))
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								benchmark/other-lang/fib.pl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								benchmark/other-lang/fib.pl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
sub fib{
 | 
			
		||||
  my $n = $_[0];
 | 
			
		||||
  if($n < 3){
 | 
			
		||||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
  else{
 | 
			
		||||
    return fib($n-1) + fib($n-2);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&fib(34);
 | 
			
		||||
							
								
								
									
										7
									
								
								benchmark/other-lang/fib.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								benchmark/other-lang/fib.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
def fib(n):
 | 
			
		||||
  if n < 3:
 | 
			
		||||
    return 1
 | 
			
		||||
  else:
 | 
			
		||||
    return fib(n-1) + fib(n-2)
 | 
			
		||||
 | 
			
		||||
fib(34)
 | 
			
		||||
							
								
								
									
										9
									
								
								benchmark/other-lang/fib.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								benchmark/other-lang/fib.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
def fib n
 | 
			
		||||
  if n < 3
 | 
			
		||||
    1
 | 
			
		||||
  else
 | 
			
		||||
    fib(n-1) + fib(n-2)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
fib(34)
 | 
			
		||||
							
								
								
									
										7
									
								
								benchmark/other-lang/fib.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								benchmark/other-lang/fib.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
(define (fib n)
 | 
			
		||||
        (if (< n 3)
 | 
			
		||||
            1
 | 
			
		||||
          (+ (fib (- n 1)) (fib (- n 2)))))
 | 
			
		||||
 | 
			
		||||
(fib 34)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								benchmark/other-lang/loop.pl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								benchmark/other-lang/loop.pl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
for($i=0; $i<30000000; $i++){
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								benchmark/other-lang/loop.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								benchmark/other-lang/loop.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
for i in xrange(30000000):
 | 
			
		||||
	pass
 | 
			
		||||
							
								
								
									
										4
									
								
								benchmark/other-lang/loop.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								benchmark/other-lang/loop.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
i=0
 | 
			
		||||
while i<30000000
 | 
			
		||||
  i+=1
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										1
									
								
								benchmark/other-lang/loop.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								benchmark/other-lang/loop.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
(dotimes (x 30000000))
 | 
			
		||||
							
								
								
									
										1
									
								
								benchmark/other-lang/loop2.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								benchmark/other-lang/loop2.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
30000000.times{}
 | 
			
		||||
							
								
								
									
										11
									
								
								benchmark/other-lang/tak.pl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								benchmark/other-lang/tak.pl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
sub tak {
 | 
			
		||||
    local($x, $y, $z) = @_;
 | 
			
		||||
    if (!($y < $x)) {
 | 
			
		||||
	return $z;
 | 
			
		||||
    } else {
 | 
			
		||||
	return &tak(&tak($x - 1, $y, $z),
 | 
			
		||||
		    &tak($y - 1, $z, $x),
 | 
			
		||||
		    &tak($z - 1, $x, $y));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
&tak(18, 9, 0);
 | 
			
		||||
							
								
								
									
										8
									
								
								benchmark/other-lang/tak.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								benchmark/other-lang/tak.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
def tak(x, y, z):
 | 
			
		||||
	if not(y<x):
 | 
			
		||||
		return z
 | 
			
		||||
	else:
 | 
			
		||||
		return tak(tak(x-1, y, z),
 | 
			
		||||
		           tak(y-1, z, x),
 | 
			
		||||
		           tak(z-1, x, y))
 | 
			
		||||
tak(18, 9, 0)
 | 
			
		||||
							
								
								
									
										13
									
								
								benchmark/other-lang/tak.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								benchmark/other-lang/tak.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
 | 
			
		||||
def tak x, y, z
 | 
			
		||||
  unless y < x
 | 
			
		||||
    z
 | 
			
		||||
  else
 | 
			
		||||
    tak( tak(x-1, y, z),
 | 
			
		||||
         tak(y-1, z, x),
 | 
			
		||||
         tak(z-1, x, y))
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
tak(18, 9, 0)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								benchmark/other-lang/tak.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								benchmark/other-lang/tak.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
(define (tak x y z)
 | 
			
		||||
        (if (not (< y x))
 | 
			
		||||
            z
 | 
			
		||||
          (tak (tak (- x 1) y z)
 | 
			
		||||
               (tak (- y 1) z x)
 | 
			
		||||
               (tak (- z 1) x y))))
 | 
			
		||||
 | 
			
		||||
(tak 18 9 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										81
									
								
								benchmark/report.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								benchmark/report.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,81 @@
 | 
			
		|||
#
 | 
			
		||||
# YARV benchmark driver
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require 'yarvutil'
 | 
			
		||||
require 'benchmark'
 | 
			
		||||
require 'rbconfig'
 | 
			
		||||
 | 
			
		||||
def exec_command type, file, w
 | 
			
		||||
  <<-EOP
 | 
			
		||||
  $DRIVER_PATH = '#{File.dirname($0)}'
 | 
			
		||||
  $LOAD_PATH.replace $LOAD_PATH | #{$LOAD_PATH.inspect}
 | 
			
		||||
  require 'benchmark'
 | 
			
		||||
  require 'yarvutil'
 | 
			
		||||
#  print '#{type}'
 | 
			
		||||
  begin
 | 
			
		||||
    puts Benchmark.measure{
 | 
			
		||||
      #{w}('#{file}')
 | 
			
		||||
    }.utime
 | 
			
		||||
  rescue Exception => exec_command_error_variable
 | 
			
		||||
    puts "\t" + exec_command_error_variable.message
 | 
			
		||||
  end
 | 
			
		||||
  EOP
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def benchmark cmd
 | 
			
		||||
  rubybin = ENV['RUBY'] || File.join(
 | 
			
		||||
    Config::CONFIG["bindir"],
 | 
			
		||||
    Config::CONFIG["ruby_install_name"] + Config::CONFIG["EXEEXT"])
 | 
			
		||||
    
 | 
			
		||||
  IO.popen(rubybin, 'r+'){|io|
 | 
			
		||||
    io.write cmd
 | 
			
		||||
    io.close_write
 | 
			
		||||
    return io.gets
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def ruby_exec file
 | 
			
		||||
  prog = exec_command 'ruby', file, 'load'
 | 
			
		||||
  benchmark prog
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def yarv_exec file
 | 
			
		||||
  prog = exec_command 'yarv', file, 'YARVUtil.load_bm'
 | 
			
		||||
  benchmark prog
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
$wr = $wy = nil
 | 
			
		||||
 | 
			
		||||
def measure bench
 | 
			
		||||
  file = File.dirname($0) + "/bm_#{bench}.rb"
 | 
			
		||||
  r = ruby_exec(file).to_f
 | 
			
		||||
  y = yarv_exec(file).to_f
 | 
			
		||||
  puts "#{bench}\t#{r}\t#{y}"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def measure2
 | 
			
		||||
  r = ruby_exec.to_f
 | 
			
		||||
  y = yarv_exec.to_f
 | 
			
		||||
  puts r/y
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if $0 == __FILE__
 | 
			
		||||
  %w{
 | 
			
		||||
    whileloop
 | 
			
		||||
    whileloop2
 | 
			
		||||
    times
 | 
			
		||||
    const
 | 
			
		||||
    method
 | 
			
		||||
    poly_method
 | 
			
		||||
    block
 | 
			
		||||
    rescue
 | 
			
		||||
    rescue2
 | 
			
		||||
  }.each{|bench|
 | 
			
		||||
    measure bench
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										137
									
								
								benchmark/run.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								benchmark/run.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,137 @@
 | 
			
		|||
#
 | 
			
		||||
# YARV benchmark driver
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require 'yarvutil'
 | 
			
		||||
require 'benchmark'
 | 
			
		||||
require 'rbconfig'
 | 
			
		||||
 | 
			
		||||
$yarvonly = false
 | 
			
		||||
$rubyonly = false
 | 
			
		||||
 | 
			
		||||
$results  = []
 | 
			
		||||
 | 
			
		||||
puts "ruby #{RUBY_VERSION} #{RUBY_PLATFORM}(#{RUBY_RELEASE_DATE})"
 | 
			
		||||
puts YARVCore::VERSION + " rev: #{YARVCore::REV} (#{YARVCore::DATE})"
 | 
			
		||||
puts YARVCore::OPTS
 | 
			
		||||
puts
 | 
			
		||||
 | 
			
		||||
def bm file
 | 
			
		||||
  prog = File.read(file).map{|e| e.rstrip}.join("\n")
 | 
			
		||||
  return if prog.empty?
 | 
			
		||||
 | 
			
		||||
  /[a-z]+_(.+)\.rb/ =~ file
 | 
			
		||||
  bm_name = $1
 | 
			
		||||
  puts '-----------------------------------------------------------' unless $yarvonly || $rubyonly
 | 
			
		||||
  puts "#{bm_name}: "
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
puts <<EOS unless $yarvonly || $rubyonly
 | 
			
		||||
#{prog}
 | 
			
		||||
--
 | 
			
		||||
EOS
 | 
			
		||||
  #iseq = YARVUtil.parse(File.read(file))
 | 
			
		||||
  #vm   = YARVCore::VM.new
 | 
			
		||||
  begin
 | 
			
		||||
    Benchmark.bm{|x|
 | 
			
		||||
    # x.report("yarv"){ YARVUtil.load_bm(file) }
 | 
			
		||||
    } unless $yarvonly || $rubyonly
 | 
			
		||||
 | 
			
		||||
    result = [bm_name]
 | 
			
		||||
    result << ruby_exec(file) unless $yarvonly
 | 
			
		||||
    result << yarv_exec(file) unless $rubyonly
 | 
			
		||||
    $results << result
 | 
			
		||||
    
 | 
			
		||||
    # puts YARVUtil.parse(File.read(file), file, 1).disasm
 | 
			
		||||
    
 | 
			
		||||
    # x.report("ruby"){ load(file, false)    }
 | 
			
		||||
    # x.report("yarv"){ vm.eval iseq }
 | 
			
		||||
  rescue Exception => e
 | 
			
		||||
    puts
 | 
			
		||||
    puts "** benchmark failure: #{e}"
 | 
			
		||||
    puts e.backtrace
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def exec_command type, file, w
 | 
			
		||||
  <<-EOP
 | 
			
		||||
  $DRIVER_PATH = '#{File.dirname($0)}'
 | 
			
		||||
  $LOAD_PATH.replace $LOAD_PATH | #{$LOAD_PATH.inspect}
 | 
			
		||||
  require 'benchmark'
 | 
			
		||||
  require 'yarvutil'
 | 
			
		||||
  print '#{type}'
 | 
			
		||||
  begin
 | 
			
		||||
    puts Benchmark.measure{
 | 
			
		||||
      #{w}('#{file}')
 | 
			
		||||
    }
 | 
			
		||||
  rescue Exception => exec_command_error_variable
 | 
			
		||||
    puts "\t" + exec_command_error_variable.message
 | 
			
		||||
  end
 | 
			
		||||
  EOP
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def benchmark prog
 | 
			
		||||
  rubybin = ENV['RUBY'] || File.join(
 | 
			
		||||
    Config::CONFIG["bindir"],
 | 
			
		||||
    Config::CONFIG["ruby_install_name"] + Config::CONFIG["EXEEXT"])
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  tmpfile = Tempfile.new('yarvbench')
 | 
			
		||||
  tmpfile.write(prog)
 | 
			
		||||
  tmpfile.close
 | 
			
		||||
 | 
			
		||||
  cmd = "#{rubybin} #{tmpfile.path}"
 | 
			
		||||
  result = `#{cmd}`
 | 
			
		||||
  puts result
 | 
			
		||||
  tmpfile.close(true)
 | 
			
		||||
  result
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def ruby_exec file
 | 
			
		||||
  prog = exec_command 'ruby', file, 'load'
 | 
			
		||||
  benchmark prog
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def yarv_exec file
 | 
			
		||||
  prog = exec_command 'yarv', file, 'YARVUtil.load_bm'
 | 
			
		||||
  benchmark prog
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if $0 == __FILE__
 | 
			
		||||
  ARGV.each{|arg|
 | 
			
		||||
    if /\A(--yarv)|(-y)/ =~ arg
 | 
			
		||||
      $yarvonly = true
 | 
			
		||||
    elsif /\A(--ruby)|(-r)/ =~ arg
 | 
			
		||||
      $rubyonly = true
 | 
			
		||||
    end
 | 
			
		||||
  }
 | 
			
		||||
  ARGV.delete_if{|arg|
 | 
			
		||||
    /\A-/ =~ arg
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if ARGV.empty?
 | 
			
		||||
    Dir.glob(File.dirname(__FILE__) + '/bm_*.rb').sort.each{|file|
 | 
			
		||||
      bm file
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    ARGV.each{|file|
 | 
			
		||||
      Dir.glob(File.join(File.dirname(__FILE__), file + '*')){|ef|
 | 
			
		||||
        # file = "#{File.dirname(__FILE__)}/#{file}.rb"
 | 
			
		||||
        bm ef
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  puts
 | 
			
		||||
  puts "-- benchmark summary ---------------------------"
 | 
			
		||||
  $results.each{|res|
 | 
			
		||||
    print res.shift, "\t"
 | 
			
		||||
    (res||[]).each{|result|
 | 
			
		||||
      /([\d\.]+)/ =~ result
 | 
			
		||||
      print $1 + "\t" if $1
 | 
			
		||||
    }
 | 
			
		||||
    puts
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										129
									
								
								benchmark/run_rite.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								benchmark/run_rite.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,129 @@
 | 
			
		|||
#
 | 
			
		||||
# YARV benchmark driver
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require 'benchmark'
 | 
			
		||||
require 'rbconfig'
 | 
			
		||||
 | 
			
		||||
$yarvonly = false
 | 
			
		||||
$rubyonly = false
 | 
			
		||||
 | 
			
		||||
$results  = []
 | 
			
		||||
 | 
			
		||||
# prepare 'wc.input'
 | 
			
		||||
def prepare_wc_input
 | 
			
		||||
  wcinput = File.join(File.dirname($0), 'wc.input')
 | 
			
		||||
  wcbase  = File.join(File.dirname($0), 'wc.input.base')
 | 
			
		||||
  unless FileTest.exist?(wcinput)
 | 
			
		||||
    data = File.read(wcbase)
 | 
			
		||||
    13.times{
 | 
			
		||||
      data << data
 | 
			
		||||
    }
 | 
			
		||||
    open(wcinput, 'w'){|f| f.write data}
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
prepare_wc_input
 | 
			
		||||
 | 
			
		||||
def bm file
 | 
			
		||||
  prog = File.read(file).map{|e| e.rstrip}.join("\n")
 | 
			
		||||
  return if prog.empty?
 | 
			
		||||
 | 
			
		||||
  /[a-z]+_(.+)\.rb/ =~ file
 | 
			
		||||
  bm_name = $1
 | 
			
		||||
  puts '-----------------------------------------------------------' unless $yarvonly || $rubyonly
 | 
			
		||||
  puts "#{bm_name}: "
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
puts <<EOS unless $yarvonly || $rubyonly
 | 
			
		||||
#{prog}
 | 
			
		||||
--
 | 
			
		||||
EOS
 | 
			
		||||
  #iseq = YARVUtil.parse(File.read(file))
 | 
			
		||||
  #vm   = YARVCore::VM.new
 | 
			
		||||
  begin
 | 
			
		||||
    result = [bm_name]
 | 
			
		||||
    result << ruby_exec(file) unless $yarvonly
 | 
			
		||||
    result << yarv_exec(file) unless $rubyonly
 | 
			
		||||
    $results << result
 | 
			
		||||
    
 | 
			
		||||
    # puts YARVUtil.parse(File.read(file), file, 1).disasm
 | 
			
		||||
    
 | 
			
		||||
    # x.report("ruby"){ load(file, false)    }
 | 
			
		||||
    # x.report("yarv"){ vm.eval iseq }
 | 
			
		||||
  rescue Exception => e
 | 
			
		||||
    puts
 | 
			
		||||
    puts "** benchmark failure: #{e}"
 | 
			
		||||
    puts e.backtrace
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def benchmark file, bin
 | 
			
		||||
  m = Benchmark.measure{
 | 
			
		||||
    `#{bin} #{$opts} #{file}`
 | 
			
		||||
  }
 | 
			
		||||
  sec = '%.3f' % m.real
 | 
			
		||||
  puts " #{sec}"
 | 
			
		||||
  sec
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def ruby_exec file
 | 
			
		||||
  print 'ruby'
 | 
			
		||||
  benchmark file, $ruby_program
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def yarv_exec file
 | 
			
		||||
  print 'yarv'
 | 
			
		||||
  benchmark file, $yarv_program
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if $0 == __FILE__
 | 
			
		||||
  ARGV.each{|arg|
 | 
			
		||||
    case arg
 | 
			
		||||
    when /\A--yarv-program=(.+)/
 | 
			
		||||
      $yarv_program = $1
 | 
			
		||||
    when /\A--ruby-program=(.+)/
 | 
			
		||||
      $ruby_program = $1
 | 
			
		||||
    when /\A--opts=(.+)/
 | 
			
		||||
      $opts = $1
 | 
			
		||||
    when /\A(--yarv)|(-y)/
 | 
			
		||||
      $yarvonly = true
 | 
			
		||||
    when /\A(--ruby)|(-r)/
 | 
			
		||||
      $rubyonly = true
 | 
			
		||||
    end
 | 
			
		||||
  }
 | 
			
		||||
  ARGV.delete_if{|arg|
 | 
			
		||||
    /\A-/ =~ arg
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  puts "Ruby:"
 | 
			
		||||
  system("#{$ruby_program} -v")
 | 
			
		||||
  puts
 | 
			
		||||
  puts "YARV:"
 | 
			
		||||
  system("#{$yarv_program} -v")
 | 
			
		||||
 | 
			
		||||
  if ARGV.empty?
 | 
			
		||||
    Dir.glob(File.dirname(__FILE__) + '/bm_*.rb').sort.each{|file|
 | 
			
		||||
      bm file
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    ARGV.each{|file|
 | 
			
		||||
      Dir.glob(File.join(File.dirname(__FILE__), file + '*')){|ef|
 | 
			
		||||
        # file = "#{File.dirname(__FILE__)}/#{file}.rb"
 | 
			
		||||
        bm ef
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  puts
 | 
			
		||||
  puts "-- benchmark summary ---------------------------"
 | 
			
		||||
  $results.each{|res|
 | 
			
		||||
    print res.shift, "\t"
 | 
			
		||||
    (res||[]).each{|result|
 | 
			
		||||
      /([\d\.]+)/ =~ result
 | 
			
		||||
      print $1 + "\t" if $1
 | 
			
		||||
    }
 | 
			
		||||
    puts
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								benchmark/runc.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								benchmark/runc.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require 'benchmark'
 | 
			
		||||
require 'rbconfig'
 | 
			
		||||
 | 
			
		||||
$rubybin = ENV['RUBY'] || File.join(
 | 
			
		||||
  Config::CONFIG["bindir"],
 | 
			
		||||
  Config::CONFIG["ruby_install_name"] + Config::CONFIG["EXEEXT"])
 | 
			
		||||
 | 
			
		||||
def runfile file
 | 
			
		||||
  puts file
 | 
			
		||||
  file = File.join(File.dirname($0), 'contrib', file)
 | 
			
		||||
  Benchmark.bm{|x|
 | 
			
		||||
    x.report('ruby'){
 | 
			
		||||
      system("#{$rubybin} #{file}")
 | 
			
		||||
    }
 | 
			
		||||
    x.report('yarv'){
 | 
			
		||||
      system("#{$rubybin} -rite -I.. #{file}")
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ARGV.each{|file|
 | 
			
		||||
  runfile file
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								benchmark/wc.input.base
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								benchmark/wc.input.base
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue