2014-03-03 03:40:47 +0000 target 0: ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] at "ruby --disable=gems" target 1: built-ruby (ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux]) at "./ruby -I../lib -I. -I.ext/common --disable-gems" ----------------------------------------------------------- app_answer 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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.051486394 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.052154691 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.052910873 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.050513477 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.051407966 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.051532405 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.051715357 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.051668946 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.052064277 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.05200922 built-ruby 0.048955292 built-ruby 0.048731373 built-ruby 0.051552559 built-ruby 0.049620618 built-ruby 0.051386146 built-ruby 0.048901411 built-ruby 0.048816793 built-ruby 0.0490602 built-ruby 0.050657769 built-ruby 0.05127853 ----------------------------------------------------------- app_aobench # AO rebder benchmark # Original program (C) Syoyo Fujita in Javascript (and other languages) # http://lucille.atso-net.jp/blog/?p=642 # http://lucille.atso-net.jp/blog/?p=711 # Ruby(yarv2llvm) version by Hideki Miura # IMAGE_WIDTH = 256 IMAGE_HEIGHT = 256 NSUBSAMPLES = 2 NAO_SAMPLES = 8 class Vec def initialize(x, y, z) @x = x @y = y @z = z end attr_accessor :x, :y, :z def vadd(b) Vec.new(@x + b.x, @y + b.y, @z + b.z) end def vsub(b) Vec.new(@x - b.x, @y - b.y, @z - b.z) end def vcross(b) Vec.new(@y * b.z - @z * b.y, @z * b.x - @x * b.z, @x * b.y - @y * b.x) end def vdot(b) @x * b.x + @y * b.y + @z * b.z end def vlength Math.sqrt(@x * @x + @y * @y + @z * @z) end def vnormalize len = vlength v = Vec.new(@x, @y, @z) if len > 1.0e-17 then v.x = v.x / len v.y = v.y / len v.z = v.z / len end v end end class Sphere def initialize(center, radius) @center = center @radius = radius end attr_reader :center, :radius def intersect(ray, isect) rs = ray.org.vsub(@center) b = rs.vdot(ray.dir) c = rs.vdot(rs) - (@radius * @radius) d = b * b - c if d > 0.0 then t = - b - Math.sqrt(d) if t > 0.0 and t < isect.t then isect.t = t isect.hit = true isect.pl = Vec.new(ray.org.x + ray.dir.x * t, ray.org.y + ray.dir.y * t, ray.org.z + ray.dir.z * t) n = isect.pl.vsub(@center) isect.n = n.vnormalize else 0.0 end end nil end end class Plane def initialize(p, n) @p = p @n = n end def intersect(ray, isect) d = -@p.vdot(@n) v = ray.dir.vdot(@n) v0 = v if v < 0.0 then v0 = -v end if v0 < 1.0e-17 then return end t = -(ray.org.vdot(@n) + d) / v if t > 0.0 and t < isect.t then isect.hit = true isect.t = t isect.n = @n isect.pl = Vec.new(ray.org.x + t * ray.dir.x, ray.org.y + t * ray.dir.y, ray.org.z + t * ray.dir.z) end nil end end class Ray def initialize(org, dir) @org = org @dir = dir end attr_accessor :org, :dir end class Isect def initialize @t = 10000000.0 @hit = false @pl = Vec.new(0.0, 0.0, 0.0) @n = Vec.new(0.0, 0.0, 0.0) end attr_accessor :t, :hit, :pl, :n end def clamp(f) i = f * 255.5 if i > 255.0 then i = 255.0 end if i < 0.0 then i = 0.0 end i.to_i end def otherBasis(basis, n) basis[2] = Vec.new(n.x, n.y, n.z) basis[1] = Vec.new(0.0, 0.0, 0.0) if n.x < 0.6 and n.x > -0.6 then basis[1].x = 1.0 elsif n.y < 0.6 and n.y > -0.6 then basis[1].y = 1.0 elsif n.z < 0.6 and n.z > -0.6 then basis[1].z = 1.0 else basis[1].x = 1.0 end basis[0] = basis[1].vcross(basis[2]) basis[0] = basis[0].vnormalize basis[1] = basis[2].vcross(basis[0]) basis[1] = basis[1].vnormalize end class Scene def initialize @spheres = Array.new @spheres[0] = Sphere.new(Vec.new(-2.0, 0.0, -3.5), 0.5) @spheres[1] = Sphere.new(Vec.new(-0.5, 0.0, -3.0), 0.5) @spheres[2] = Sphere.new(Vec.new(1.0, 0.0, -2.2), 0.5) @plane = Plane.new(Vec.new(0.0, -0.5, 0.0), Vec.new(0.0, 1.0, 0.0)) end def ambient_occlusion(isect) basis = Array.new otherBasis(basis, isect.n) ntheta = NAO_SAMPLES nphi = NAO_SAMPLES eps = 0.0001 occlusion = 0.0 p0 = Vec.new(isect.pl.x + eps * isect.n.x, isect.pl.y + eps * isect.n.y, isect.pl.z + eps * isect.n.z) nphi.times do |j| ntheta.times do |i| r = rand phi = 2.0 * 3.14159265 * rand x = Math.cos(phi) * Math.sqrt(1.0 - r) y = Math.sin(phi) * Math.sqrt(1.0 - r) z = Math.sqrt(r) rx = x * basis[0].x + y * basis[1].x + z * basis[2].x ry = x * basis[0].y + y * basis[1].y + z * basis[2].y rz = x * basis[0].z + y * basis[1].z + z * basis[2].z raydir = Vec.new(rx, ry, rz) ray = Ray.new(p0, raydir) occisect = Isect.new @spheres[0].intersect(ray, occisect) @spheres[1].intersect(ray, occisect) @spheres[2].intersect(ray, occisect) @plane.intersect(ray, occisect) if occisect.hit then occlusion = occlusion + 1.0 else 0.0 end end end occlusion = (ntheta.to_f * nphi.to_f - occlusion) / (ntheta.to_f * nphi.to_f) Vec.new(occlusion, occlusion, occlusion) end def render(w, h, nsubsamples) cnt = 0 nsf = nsubsamples.to_f h.times do |y| w.times do |x| rad = Vec.new(0.0, 0.0, 0.0) # Subsmpling nsubsamples.times do |v| nsubsamples.times do |u| cnt = cnt + 1 wf = w.to_f hf = h.to_f xf = x.to_f yf = y.to_f uf = u.to_f vf = v.to_f px = (xf + (uf / nsf) - (wf / 2.0)) / (wf / 2.0) py = -(yf + (vf / nsf) - (hf / 2.0)) / (hf / 2.0) eye = Vec.new(px, py, -1.0).vnormalize ray = Ray.new(Vec.new(0.0, 0.0, 0.0), eye) isect = Isect.new @spheres[0].intersect(ray, isect) @spheres[1].intersect(ray, isect) @spheres[2].intersect(ray, isect) @plane.intersect(ray, isect) if isect.hit then col = ambient_occlusion(isect) rad.x = rad.x + col.x rad.y = rad.y + col.y rad.z = rad.z + col.z end end end r = rad.x / (nsf * nsf) g = rad.y / (nsf * nsf) b = rad.z / (nsf * nsf) printf("%c", clamp(r)) printf("%c", clamp(g)) printf("%c", clamp(b)) end nil end nil end end alias printf_orig printf def printf *args end # File.open("ao.ppm", "w") do |fp| printf("P6\n") printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT) printf("255\n", IMAGE_WIDTH, IMAGE_HEIGHT) Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES) # end undef printf alias printf printf_orig ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 76.28222306 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 75.040595342 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 75.763683556 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 75.617617887 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 74.82321601 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 75.372689202 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 74.564339732 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 74.472605462 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 74.519635934 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 74.7828191 built-ruby 73.659403622 built-ruby 74.814275047 built-ruby 74.458171429 built-ruby 73.593031479 built-ruby 75.032606542 built-ruby 75.066179051 built-ruby 73.94259832 built-ruby 75.403028399 built-ruby 73.139660676 built-ruby 74.286586065 ----------------------------------------------------------- app_erb # # Create many HTML strings with ERB. # require 'erb' data = DATA.read max = 15_000 title = "hello world!" content = "hello world!\n" * 10 max.times{ ERB.new(data).result(binding) } __END__ <%= title %>

<%= title %>

<%= content %>

ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.372013136 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.411414134 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.384225889 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.379861462 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.376959808 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.352220227 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.385264004 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.376638654 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.366504219 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.371758383 built-ruby 1.359012088 built-ruby 1.355175336 built-ruby 1.364910568 built-ruby 1.358210732 built-ruby 1.456285969 built-ruby 1.360442376 built-ruby 1.44478358 built-ruby 1.359399812 built-ruby 1.369572009 built-ruby 1.359783074 ----------------------------------------------------------- app_factorial def fact(n) if(n > 1) n * fact(n-1) else 1 end end 100.times { fact(5000) } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.116452856 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.115754711 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.112362013 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.115912431 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.113059013 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.115771447 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.112645314 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.110940011 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.107984512 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.114691212 built-ruby 1.113215785 built-ruby 1.113816906 built-ruby 1.108319627 built-ruby 1.10901731 built-ruby 1.109241306 built-ruby 1.113172142 built-ruby 1.114934174 built-ruby 1.112793556 built-ruby 1.106314542 built-ruby 1.114847312 ----------------------------------------------------------- app_fib def fib n if n < 3 1 else fib(n-1) + fib(n-2) end end fib(34) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.652588155 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.658155948 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.652777087 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.652436066 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.65807399 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.650007131 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.672764714 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.657611733 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.658818875 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.657740144 built-ruby 0.662858657 built-ruby 0.659863337 built-ruby 0.666308997 built-ruby 0.659007758 built-ruby 0.661892827 built-ruby 0.663876125 built-ruby 0.662907332 built-ruby 0.651427646 built-ruby 0.663716112 built-ruby 0.655909416 ----------------------------------------------------------- app_mandelbrot 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..1000).each{|dx| (0..1000).each{|dy| x = dx / 50.0 y = dy / 50.0 c = Complex(x, y) ary << c if mandelbrot?(c) } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.442799799 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.485098917 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.459704855 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.524947459 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.43736204 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.473151552 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.440638072 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.455886502 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.507587815 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.463714791 built-ruby 1.426758586 built-ruby 1.401519223 built-ruby 1.425131598 built-ruby 1.42883479 built-ruby 1.412584046 built-ruby 1.390131724 built-ruby 1.413132165 built-ruby 1.397389331 built-ruby 1.425281716 built-ruby 1.40002631 ----------------------------------------------------------- app_pentomino #!/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.dup [-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.dup, 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.dup 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.dup, 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) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.244940487 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.162763094 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.056381253 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.882241323 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 20.956738029 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.290704655 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.077324515 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.165007028 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.655409168 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 21.070635887 built-ruby 20.074140245 built-ruby 19.521829645 built-ruby 19.695717446 built-ruby 19.589049446 built-ruby 20.143684402 built-ruby 20.016220892 built-ruby 19.965130791 built-ruby 19.85593923 built-ruby 20.22953989 built-ruby 19.64735851 ----------------------------------------------------------- app_raise i = 0 while i<300000 i += 1 begin raise rescue end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.42593225 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.44425343 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.42653726 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.427839553 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.424736711 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.432297167 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.428573184 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.414352713 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.427098142 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.411857434 built-ruby 0.422154534 built-ruby 0.421707118 built-ruby 0.419566213 built-ruby 0.463346254 built-ruby 0.444736002 built-ruby 0.429276006 built-ruby 0.427038444 built-ruby 0.422311571 built-ruby 0.417886171 built-ruby 0.424726982 ----------------------------------------------------------- app_strconcat i = 0 while i<2_000_000 "#{1+1} #{1+1} #{1+1}" i += 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.182427291 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.191254338 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.190234108 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.192497868 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.191608181 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.189679877 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.191033956 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.247396668 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.205970791 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.190448861 built-ruby 1.200741397 built-ruby 1.209377487 built-ruby 1.27207305 built-ruby 1.207387391 built-ruby 1.21093106 built-ruby 1.204691243 built-ruby 1.20722958 built-ruby 1.208806687 built-ruby 1.197157917 built-ruby 1.20032084 ----------------------------------------------------------- app_tak 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) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.880836052 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.957240829 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.885714573 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.887839269 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.895350548 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.931367612 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.888295097 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.915260165 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.883128256 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.87888814 built-ruby 0.883463695 built-ruby 0.893225405 built-ruby 0.887337039 built-ruby 0.956081455 built-ruby 0.907021025 built-ruby 0.901374593 built-ruby 0.879802131 built-ruby 0.892592433 built-ruby 0.896936562 built-ruby 0.887358648 ----------------------------------------------------------- app_tarai 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) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.80473076 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.715020072 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.718913658 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.715580343 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.708577762 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.719989215 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.762486648 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.763604328 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.723824632 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.753863453 built-ruby 0.754390278 built-ruby 0.822774313 built-ruby 0.790622596 built-ruby 0.746963502 built-ruby 0.730139885 built-ruby 0.72812503 built-ruby 0.717489991 built-ruby 0.723603044 built-ruby 0.744843514 built-ruby 0.741498482 ----------------------------------------------------------- app_uri require 'uri' 100_000.times{ uri = URI.parse('http://www.ruby-lang.org') uri.scheme uri.host uri.port } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.014899965 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.016150325 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.022751881 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.019311182 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.012396437 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.051855989 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.00854376 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.012750608 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.0141989 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.008688491 built-ruby 1.012004169 built-ruby 1.017069299 built-ruby 1.018969564 built-ruby 1.021713477 built-ruby 1.022185754 built-ruby 1.022132848 built-ruby 1.017878131 built-ruby 1.031052965 built-ruby 1.015147236 built-ruby 1.015461209 ----------------------------------------------------------- hash_aref_miss h = {} strs = ('a'..'z').to_a.map!(&:freeze) strs.each { |s| h[s] = s } strs = ('A'..'Z').to_a 1_000_000.times { strs.each { |s| h[s] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.150363576 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.33140737 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.181972674 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.310237395 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.170677752 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.29863038 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.115307283 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.319271432 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.275353171 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.193486648 built-ruby 2.973051711 built-ruby 2.988772837 built-ruby 3.017699425 built-ruby 3.018192979 built-ruby 2.987706677 built-ruby 2.987029147 built-ruby 3.023075056 built-ruby 3.051296099 built-ruby 2.986789088 built-ruby 2.990590989 ----------------------------------------------------------- hash_aref_str h = {} strs = ('a'..'z').to_a.map!(&:freeze) strs.each { |s| h[s] = s } 1_000_000.times { strs.each { |s| h[s] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.045262301 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.992126372 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.980529668 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.93975854 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.95620463 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.93230148 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.982601048 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.084875448 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.983552737 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.047222506 built-ruby 2.615038049 built-ruby 2.560129607 built-ruby 2.718287301 built-ruby 2.606349378 built-ruby 2.631712318 built-ruby 2.581036767 built-ruby 2.682174514 built-ruby 2.549183861 built-ruby 2.523578659 built-ruby 2.537485299 ----------------------------------------------------------- hash_aref_sym h = {} syms = ('a'..'z').to_a.map(&:to_sym) syms.each { |s| h[s] = s } 1_000_000.times { syms.each { |s| h[s] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.665340328 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.628559959 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.706445581 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.684307504 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.674841138 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.691248481 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.585594779 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.621121111 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.652035494 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.640751773 built-ruby 2.647628169 built-ruby 2.65472363 built-ruby 2.659840211 built-ruby 2.651832658 built-ruby 2.643133916 built-ruby 2.584773399 built-ruby 2.653144987 built-ruby 2.629506272 built-ruby 2.660196515 built-ruby 2.66011489 ----------------------------------------------------------- hash_flatten h = {} 10000.times do |i| h[i] = nil end 1000.times do h.flatten end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.639700619 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.640170358 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.658329822 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.630564289 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.635752094 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.632135297 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.635555258 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.639566231 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.63674395 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.636456799 built-ruby 0.605568463 built-ruby 0.60716427 built-ruby 0.606772788 built-ruby 0.606324023 built-ruby 0.577543482 built-ruby 0.577639314 built-ruby 0.607270464 built-ruby 0.604719471 built-ruby 0.60398427 built-ruby 0.577916025 ----------------------------------------------------------- hash_ident_num h = {}.compare_by_identity nums = (1..26).to_a nums.each { |n| h[n] = n } 1_000_000.times { nums.each { |n| h[n] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.847680754 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.837997592 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.859797745 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.920554424 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.865287945 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.852068215 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.873666379 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.859513362 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.856839859 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.856641542 built-ruby 1.84309221 built-ruby 1.840090654 built-ruby 1.873486587 built-ruby 1.842017465 built-ruby 1.839703987 built-ruby 1.879980055 built-ruby 1.870565053 built-ruby 1.854980422 built-ruby 1.824815276 built-ruby 1.940134225 ----------------------------------------------------------- hash_ident_obj h = {}.compare_by_identity objs = 26.times.map { Object.new } objs.each { |o| h[o] = o } 1_000_000.times { objs.each { |o| h[o] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.154062596 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.095126739 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.07564334 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.102570095 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.102601896 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.136344514 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.090273918 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.094421588 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.103306373 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.087080387 built-ruby 1.906821656 built-ruby 1.89924294 built-ruby 1.95711611 built-ruby 1.92882307 built-ruby 2.011290126 built-ruby 1.924017026 built-ruby 1.898743791 built-ruby 1.890589718 built-ruby 2.054866632 built-ruby 1.904732663 ----------------------------------------------------------- hash_ident_str h = {}.compare_by_identity strs = ('a'..'z').to_a strs.each { |s| h[s] = s } 1_000_000.times { strs.each { |s| h[s] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.107988159 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.15040364 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.295381945 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.119524276 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.106361563 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.090949755 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.096513615 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.107144524 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.082204109 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.092154044 built-ruby 1.964071912 built-ruby 1.948067179 built-ruby 1.914383319 built-ruby 1.927857978 built-ruby 1.94902562 built-ruby 1.931556729 built-ruby 1.996915824 built-ruby 1.882040065 built-ruby 1.946316944 built-ruby 1.89626995 ----------------------------------------------------------- hash_ident_sym h = {}.compare_by_identity syms = ('a'..'z').to_a.map(&:to_sym) syms.each { |s| h[s] = s } 1_000_000.times { syms.each { |s| h[s] } } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.083774478 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.118436672 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.049236594 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.098811208 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.102398579 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.239272098 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.096419651 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.084577277 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.065336195 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.0546724 built-ruby 2.081298877 built-ruby 2.058637959 built-ruby 2.039411864 built-ruby 2.123824583 built-ruby 2.012701916 built-ruby 2.064282099 built-ruby 2.048054792 built-ruby 2.016999453 built-ruby 2.03270156 built-ruby 2.0260981 ----------------------------------------------------------- hash_keys h = {} 10000.times do |i| h[i] = nil end 5000.times do h.keys end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.231266103 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.231002583 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.22872609 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.234598014 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.231443566 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.234499339 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.231232591 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.234721436 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.229909199 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.234665547 built-ruby 0.233372541 built-ruby 0.228649895 built-ruby 0.233112857 built-ruby 0.230879097 built-ruby 0.231648092 built-ruby 0.231693973 built-ruby 0.230972906 built-ruby 0.231762175 built-ruby 0.231695712 built-ruby 0.231815343 ----------------------------------------------------------- hash_shift h = {} 10000.times do |i| h[i] = nil end 50000.times do k, v = h.shift h[k] = v end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.029391414 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.028936869 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.028853989 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.028758795 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.029395228 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.028858243 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.029285958 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.029194202 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.028691581 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.028922427 built-ruby 0.029859858 built-ruby 0.029392944 built-ruby 0.028744555 built-ruby 0.029268786 built-ruby 0.028395836 built-ruby 0.029969133 built-ruby 0.028899144 built-ruby 0.028379038 built-ruby 0.029256514 built-ruby 0.028534738 ----------------------------------------------------------- hash_values h = {} 10000.times do |i| h[i] = nil end 5000.times do h.values end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.241557995 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.248352902 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.248504431 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.241919732 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.249879146 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.248904581 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.248914572 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.248590185 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.249300993 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.240433964 built-ruby 0.243215851 built-ruby 0.243060604 built-ruby 0.242811048 built-ruby 0.242923841 built-ruby 0.242935722 built-ruby 0.246275392 built-ruby 0.237895235 built-ruby 0.243635667 built-ruby 0.243095873 built-ruby 0.238016242 ----------------------------------------------------------- io_file_create # # Create files # max = 200_000 file = './tmpfile_of_bm_io_file_create' max.times{ f = open(file, 'w') f.close#(true) } File.unlink(file) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.15012037 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.186108216 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.247388473 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.058398269 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.173691503 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.074674317 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.10350798 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.20411352 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.065935638 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.211661471 built-ruby 2.055289624 built-ruby 2.055549282 built-ruby 2.049634133 built-ruby 2.081176137 built-ruby 2.204191833 built-ruby 2.051385434 built-ruby 2.043254808 built-ruby 2.087310599 built-ruby 2.087469906 built-ruby 2.159800316 ----------------------------------------------------------- io_file_read # # Seek and Read file. # require 'tempfile' max = 200_000 str = "Hello world! " * 1000 f = Tempfile.new('yarv-benchmark') f.write str max.times{ f.seek 0 f.read } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.351848851 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.303541674 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.292545754 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.311750934 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.304942087 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.277585558 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.311502099 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.314265876 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.306018131 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.313952268 built-ruby 2.303481832 built-ruby 2.29245913 built-ruby 2.286539727 built-ruby 2.302673523 built-ruby 2.294012632 built-ruby 2.275821465 built-ruby 2.309727483 built-ruby 2.28751792 built-ruby 2.290025249 built-ruby 2.280388301 ----------------------------------------------------------- io_file_write # # Seek and Write file. # require 'tempfile' max = 200_000 str = "Hello world! " * 1000 f = Tempfile.new('yarv-benchmark') max.times{ f.seek 0 f.write str } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.364470635 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.443482596 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.352100461 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.540949179 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.344869804 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.360523359 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.345119447 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.52464286 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.349122239 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.363463726 built-ruby 1.495641829 built-ruby 1.343437435 built-ruby 1.365933449 built-ruby 1.353055246 built-ruby 1.345936209 built-ruby 1.36394151 built-ruby 1.344445322 built-ruby 1.33845488 built-ruby 1.341781047 built-ruby 1.342889126 ----------------------------------------------------------- io_select # IO.select performance w = [ IO.pipe[1] ]; nr = 1000000 nr.times { IO.select nil, w } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.196763169 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.17431358 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.208081258 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.200275973 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.173596785 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.187546907 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.222382754 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.198710168 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.313397326 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.186621375 built-ruby 2.130947011 built-ruby 2.132125695 built-ruby 2.127054464 built-ruby 2.116455148 built-ruby 2.193726701 built-ruby 2.115034472 built-ruby 2.099858974 built-ruby 2.201755343 built-ruby 2.095706548 built-ruby 2.239491684 ----------------------------------------------------------- io_select2 # IO.select performance. worst case of single fd. ios = [] nr = 1000000 if defined?(Process::RLIMIT_NOFILE) max = Process.getrlimit(Process::RLIMIT_NOFILE)[0] else max = 64 end puts "max fd: #{max} (results not apparent with <= 1024 max fd)" ((max / 2) - 10).times do ios.concat IO.pipe end last = [ ios[-1] ] puts "last IO: #{last[0].inspect}" nr.times do IO.select nil, last end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.459198846 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.441079703 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.517267051 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.47825378 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.451049842 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.475805872 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.435878459 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.421592374 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.557431176 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.462164903 built-ruby 2.449448279 built-ruby 2.468360948 built-ruby 2.474833699 built-ruby 2.428662176 built-ruby 2.560115957 built-ruby 2.448703236 built-ruby 2.494189055 built-ruby 2.45821359 built-ruby 2.502973425 built-ruby 2.456074628 ----------------------------------------------------------- io_select3 # IO.select performance. a lot of fd ios = [] nr = 100 if defined?(Process::RLIMIT_NOFILE) max = Process.getrlimit(Process::RLIMIT_NOFILE)[0] else max = 64 end puts "max fd: #{max} (results not apparent with <= 1024 max fd)" (max - 10).times do r, w = IO.pipe r.close ios.push w end nr.times do IO.select nil, ios end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027749818 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027510803 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027440956 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027347205 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027651104 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027484203 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.02762075 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027533598 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027471681 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.027379468 built-ruby 0.027777754 built-ruby 0.027304163 built-ruby 0.02779094 built-ruby 0.027302049 built-ruby 0.027558127 built-ruby 0.027759264 built-ruby 0.027532716 built-ruby 0.027750293 built-ruby 0.027480764 built-ruby 0.027726797 ----------------------------------------------------------- loop_for for i in 1..30_000_000 # end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.515631549 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.523817869 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.517866532 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.518641476 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.512841744 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.528650796 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.574996032 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.515019959 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.518998364 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.542640504 built-ruby 1.521514254 built-ruby 1.539894674 built-ruby 1.543350711 built-ruby 1.55219324 built-ruby 1.533350278 built-ruby 1.528339869 built-ruby 1.549616749 built-ruby 1.687514505 built-ruby 1.553551878 built-ruby 1.571256542 ----------------------------------------------------------- loop_generator max = 600000 if defined? Fiber gen = (1..max).each loop do gen.next end else require 'generator' gen = Generator.new((0..max)) while gen.next? gen.next end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.032127721 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.020787415 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.040499465 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.039454647 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.035345216 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.041145626 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.027060772 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.050034533 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.027019081 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.026515786 built-ruby 1.078537909 built-ruby 1.059813071 built-ruby 1.059303262 built-ruby 1.05484698 built-ruby 1.064998811 built-ruby 1.056364195 built-ruby 1.058853477 built-ruby 1.050433032 built-ruby 1.053509092 built-ruby 1.064850185 ----------------------------------------------------------- loop_times 30_000_000.times{|e|} ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.386630337 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.393951221 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.410187124 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.389138901 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.404695368 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.390174035 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.479144974 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.395252295 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.395175994 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.405689729 built-ruby 1.440144838 built-ruby 1.431150301 built-ruby 1.450707991 built-ruby 1.398915774 built-ruby 1.422066295 built-ruby 1.415842197 built-ruby 1.404714981 built-ruby 1.457967323 built-ruby 1.404065396 built-ruby 1.422563134 ----------------------------------------------------------- loop_whileloop i = 0 while i<30_000_000 # benchmark loop 1 i += 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.647253676 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.648058265 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.650437809 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.647776839 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.649149892 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.649282602 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.650336971 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.647311412 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.647791315 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.647855745 built-ruby 0.653449574 built-ruby 0.649228531 built-ruby 0.648935655 built-ruby 0.653189887 built-ruby 0.650698526 built-ruby 0.650672511 built-ruby 0.647098579 built-ruby 0.647618455 built-ruby 0.652011533 built-ruby 0.646575889 ----------------------------------------------------------- loop_whileloop2 i = 0 while i< 6_000_000 # benchmark loop 2 i += 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134345343 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134213697 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134592692 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134671621 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.13443171 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134448608 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134848734 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134591705 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134472821 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134661133 built-ruby 0.13509294 built-ruby 0.134825974 built-ruby 0.13404156 built-ruby 0.134857579 built-ruby 0.138740788 built-ruby 0.13860662 built-ruby 0.134091343 built-ruby 0.134343528 built-ruby 0.134475019 built-ruby 0.135132762 ----------------------------------------------------------- so_ackermann #!/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) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.749461374 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.732883556 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.734988329 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.792355423 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.698901125 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.704610818 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.726784138 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.751844665 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.706085359 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.734658312 built-ruby 0.700951538 built-ruby 0.714290532 built-ruby 0.749752239 built-ruby 0.699094438 built-ruby 0.697390919 built-ruby 0.695934687 built-ruby 0.721746702 built-ruby 0.695986501 built-ruby 0.730318347 built-ruby 0.713785099 ----------------------------------------------------------- so_array #!/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}" ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.075811273 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.088774958 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.10795022 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.119834581 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.110330019 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.116034926 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.078173922 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.085679421 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.168122688 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.076971454 built-ruby 1.12127799 built-ruby 1.115417568 built-ruby 1.10512937 built-ruby 1.126692649 built-ruby 1.088702553 built-ruby 1.092099007 built-ruby 1.103389004 built-ruby 1.103133306 built-ruby 1.077123631 built-ruby 1.098956854 ----------------------------------------------------------- so_binary_trees # The Computer Language Shootout Benchmarks # http://shootout.alioth.debian.org # # contributed by Jesse Millikan # disable output alias puts_orig puts def puts str # disable puts end def item_check(tree) if tree[0] == nil tree[1] else tree[1] + item_check(tree[0]) - item_check(tree[2]) end end def bottom_up_tree(item, depth) if depth > 0 item_item = 2 * item depth -= 1 [bottom_up_tree(item_item - 1, depth), item, bottom_up_tree(item_item, depth)] else [nil, item, nil] end end max_depth = 16 # ARGV[0].to_i min_depth = 4 max_depth = min_depth + 2 if min_depth + 2 > max_depth stretch_depth = max_depth + 1 stretch_tree = bottom_up_tree(0, stretch_depth) puts "stretch tree of depth #{stretch_depth}\t check: #{item_check(stretch_tree)}" stretch_tree = nil long_lived_tree = bottom_up_tree(0, max_depth) min_depth.step(max_depth + 1, 2) do |depth| iterations = 2**(max_depth - depth + min_depth) check = 0 for i in 1..iterations temp_tree = bottom_up_tree(i, depth) check += item_check(temp_tree) temp_tree = bottom_up_tree(-i, depth) check += item_check(temp_tree) end puts "#{iterations * 2}\t trees of depth #{depth}\t check: #{check}" end puts "long lived tree of depth #{max_depth}\t check: #{item_check(long_lived_tree)}" undef puts alias puts puts_orig ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.392108037 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.575293864 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.604042401 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.511401272 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.470690877 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.437955053 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.530130087 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.503221174 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.590118023 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 7.502304706 built-ruby 7.474984783 built-ruby 7.520627819 built-ruby 7.392327507 built-ruby 7.324416008 built-ruby 7.34655363 built-ruby 7.443168888 built-ruby 7.390154004 built-ruby 7.42092577 built-ruby 7.563449249 built-ruby 7.55718874 ----------------------------------------------------------- so_concatenate #!/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 = '' 4_000_000.times do |e| hello << STUFF end end # puts hello.length ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.366533889 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.36988002 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.394861024 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.363805446 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.385738655 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.3456173 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.318642713 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.366079569 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.374423392 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 4.355432794 built-ruby 4.865675584 built-ruby 4.870037989 built-ruby 4.630086701 built-ruby 4.845620431 built-ruby 4.662494813 built-ruby 4.721467372 built-ruby 4.686119271 built-ruby 4.686535726 built-ruby 4.826365569 built-ruby 4.740444021 ----------------------------------------------------------- so_count_words #!/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 tmp = input.read(4096) or break data = tmp << (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}" ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.266176543 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.266176114 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.266464768 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.265603339 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.267259677 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.268029258 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.26559211 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.26737735 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.267121318 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.26801092 built-ruby 0.259587182 built-ruby 0.257938883 built-ruby 0.258828469 built-ruby 0.257959902 built-ruby 0.25930439 built-ruby 0.259184446 built-ruby 0.258405714 built-ruby 0.258624781 built-ruby 0.258514058 built-ruby 0.258994305 ----------------------------------------------------------- so_exception #!/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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.47473351 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.48780931 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.475902947 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.482409332 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.475400111 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.48573775 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.467103972 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.497078565 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.489231981 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.478557581 built-ruby 0.456176807 built-ruby 0.502787889 built-ruby 0.545216509 built-ruby 0.505981384 built-ruby 0.467629505 built-ruby 0.466062921 built-ruby 0.467714121 built-ruby 0.463960227 built-ruby 0.479593309 built-ruby 0.475851362 ----------------------------------------------------------- so_fannkuch # The Computer Language Shootout # http://shootout.alioth.debian.org/ # Contributed by Sokolov Yura # Modified by Ryan Williams def fannkuch(n) maxFlips, m, r, check = 0, n-1, n, 0 count = (1..n).to_a perm = (1..n).to_a while true if check < 30 puts "#{perm}" check += 1 end while r != 1 count[r-1] = r r -= 1 end if perm[0] != 1 and perm[m] != n perml = perm.clone #.dup flips = 0 while (k = perml.first ) != 1 perml = perml.slice!(0, k).reverse + perml flips += 1 end maxFlips = flips if flips > maxFlips end while true if r==n then return maxFlips end perm.insert r,perm.shift break if (count[r] -= 1) > 0 r += 1 end end end def puts *args end N = 9 # (ARGV[0] || 1).to_i puts "Pfannkuchen(#{N}) = #{fannkuch(N)}" ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.634322316 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.650334509 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.655529282 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.641135793 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.641274744 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.64316373 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.649453082 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.635810107 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.647577591 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.644083267 built-ruby 1.668030249 built-ruby 1.642846247 built-ruby 1.669170086 built-ruby 1.653810617 built-ruby 1.654801625 built-ruby 1.643132302 built-ruby 1.669403862 built-ruby 1.651756402 built-ruby 1.664227861 built-ruby 1.642326611 ----------------------------------------------------------- so_fasta # The Computer Language Shootout # http://shootout.alioth.debian.org/ # Contributed by Sokolov Yura $last = 42.0 def gen_random (max,im=139968,ia=3877,ic=29573) (max * ($last = ($last * ia + ic) % im)) / im end alu = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+ "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA" iub = [ ["a", 0.27], ["c", 0.12], ["g", 0.12], ["t", 0.27], ["B", 0.02], ["D", 0.02], ["H", 0.02], ["K", 0.02], ["M", 0.02], ["N", 0.02], ["R", 0.02], ["S", 0.02], ["V", 0.02], ["W", 0.02], ["Y", 0.02], ] homosapiens = [ ["a", 0.3029549426680], ["c", 0.1979883004921], ["g", 0.1975473066391], ["t", 0.3015094502008], ] def make_repeat_fasta(id, desc, src, n) puts ">#{id} #{desc}" v = nil width = 60 l = src.length s = src * ((n / l) + 1) s.slice!(n, l) puts(s.scan(/.{1,#{width}}/).join("\n")) end def make_random_fasta(id, desc, table, n) puts ">#{id} #{desc}" rand, v = nil,nil width = 60 chunk = 1 * width prob = 0.0 table.each{|v| v[1]= (prob += v[1])} for i in 1..(n/width) puts((1..width).collect{ rand = gen_random(1.0) table.find{|v| v[1]>rand}[0] }.join) end if n%width != 0 puts((1..(n%width)).collect{ rand = gen_random(1.0) table.find{|v| v[1]>rand}[0] }.join) end end n = (ARGV[0] or 250_000).to_i make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2) make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3) make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.188789812 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.186437712 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.224556415 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.21395413 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.196873763 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.206665601 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.294070149 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.183409065 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.194839747 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.215924259 built-ruby 2.162920153 built-ruby 2.145628495 built-ruby 2.099893874 built-ruby 2.130656906 built-ruby 2.126734623 built-ruby 2.134631918 built-ruby 2.190525573 built-ruby 2.176440086 built-ruby 2.140874902 built-ruby 2.131539105 ----------------------------------------------------------- so_k_nucleotide # The Computer Language Shootout # http://shootout.alioth.debian.org # # contributed by jose fco. gonzalez # modified by Sokolov Yura seq = String.new def frecuency( seq,length ) n, table = seq.length - length + 1, Hash.new(0) f, i = nil, nil (0 ... length).each do |f| (f ... n).step(length) do |i| table[seq[i,length]] += 1 end end [n,table] end def sort_by_freq( seq,length ) n,table = frecuency( seq,length ) a, b, v = nil, nil, nil table.sort{|a,b| b[1] <=> a[1]}.each do |v| puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)] end puts end def find_seq( seq,s ) n,table = frecuency( seq,s.length ) puts "#{table[s].to_s}\t#{s.upcase}" end input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb') line = input.gets while line !~ /^>THREE/ line = input.gets while (line !~ /^>/) & line do seq << line.chomp line = input.gets end [1,2].each {|i| sort_by_freq( seq,i ) } %w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.283470433 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.285311075 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.319623586 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.295926827 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.292305892 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.287944697 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.29416462 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.291910095 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.302574504 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.291438696 built-ruby 1.277180933 built-ruby 1.225989591 built-ruby 1.23047893 built-ruby 1.233390369 built-ruby 1.244867982 built-ruby 1.269283861 built-ruby 1.241743658 built-ruby 1.239233166 built-ruby 1.220301089 built-ruby 1.236458527 ----------------------------------------------------------- so_lists #from http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby NUM = 300 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 LIMIT_SQUARED escape = true break end end byte_acc = (byte_acc << 1) | (escape ? 0b0 : 0b1) bit_num += 1 # Code is very similar for these cases, but using separate blocks # ensures we skip the shifting when it's unnecessary, which is most cases. if (bit_num == 8) print byte_acc.chr byte_acc = 0 bit_num = 0 elsif (x == count_size) byte_acc <<= (8 - bit_num) print byte_acc.chr byte_acc = 0 bit_num = 0 end end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.055747541 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.043300487 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.120542722 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.030764261 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.097973728 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.07746904 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.049483736 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.049083223 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.043629787 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.025807105 built-ruby 3.131106074 built-ruby 3.259330743 built-ruby 3.160832861 built-ruby 3.103438163 built-ruby 3.216773438 built-ruby 3.099932571 built-ruby 3.102090082 built-ruby 3.233267405 built-ruby 3.22288164 built-ruby 3.16732368 ----------------------------------------------------------- so_matrix #!/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 = 40 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]}" ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.77334466 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.786215072 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.763708114 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.775329871 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.782067475 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.791908709 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.781533373 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.772673019 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.803298301 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.787320985 built-ruby 0.775284979 built-ruby 0.776144324 built-ruby 0.784316989 built-ruby 0.755023733 built-ruby 0.772776808 built-ruby 0.782149253 built-ruby 0.774202765 built-ruby 0.76049647 built-ruby 0.804662538 built-ruby 0.784501129 ----------------------------------------------------------- so_meteor_contest #!/usr/bin/env ruby # # The Computer Language Shootout # http://shootout.alioth.debian.org # contributed by Kevin Barnes (Ruby novice) # PROGRAM: the main body is at the bottom. # 1) read about the problem here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/ # 2) see how I represent a board as a bitmask by reading the blank_board comments # 3) read as your mental paths take you def print *args end # class to represent all information about a particular rotation of a particular piece class Rotation # an array (by location) containing a bit mask for how the piece maps at the given location. # if the rotation is invalid at that location the mask will contain false attr_reader :start_masks # maps a direction to a relative location. these differ depending on whether it is an even or # odd row being mapped from @@rotation_even_adder = { :west => -1, :east => 1, :nw => -7, :ne => -6, :sw => 5, :se => 6 } @@rotation_odd_adder = { :west => -1, :east => 1, :nw => -6, :ne => -5, :sw => 6, :se => 7 } def initialize( directions ) @even_offsets, @odd_offsets = normalize_offsets( get_values( directions )) @even_mask = mask_for_offsets( @even_offsets) @odd_mask = mask_for_offsets( @odd_offsets) @start_masks = Array.new(60) # create the rotational masks by placing the base mask at the location and seeing if # 1) it overlaps the boundaries and 2) it produces a prunable board. if either of these # is true the piece cannot be placed 0.upto(59) do | offset | mask = is_even(offset) ? (@even_mask << offset) : (@odd_mask << offset) if (blank_board & mask == 0 && !prunable(blank_board | mask, 0, true)) then imask = compute_required( mask, offset) @start_masks[offset] = [ mask, imask, imask | mask ] else @start_masks[offset] = false end end end def compute_required( mask, offset ) board = blank_board 0.upto(offset) { | i | board |= 1 << i } board |= mask return 0 if (!prunable(board | mask, offset)) board = flood_fill(board,58) count = 0 imask = 0 0.upto(59) do | i | if (board[i] == 0) then imask |= (1 << i) count += 1 end end (count > 0 && count < 5) ? imask : 0 end def flood_fill( board, location) return board if (board[location] == 1) board |= 1 << location row, col = location.divmod(6) board = flood_fill( board, location - 1) if (col > 0) board = flood_fill( board, location + 1) if (col < 4) if (row % 2 == 0) then board = flood_fill( board, location - 7) if (col > 0 && row > 0) board = flood_fill( board, location - 6) if (row > 0) board = flood_fill( board, location + 6) if (row < 9) board = flood_fill( board, location + 5) if (col > 0 && row < 9) else board = flood_fill( board, location - 5) if (col < 4 && row > 0) board = flood_fill( board, location - 6) if (row > 0) board = flood_fill( board, location + 6) if (row < 9) board = flood_fill( board, location + 7) if (col < 4 && row < 9) end board end # given a location, produces a list of relative locations covered by the piece at this rotation def offsets( location) if is_even( location) then @even_offsets.collect { | value | value + location } else @odd_offsets.collect { | value | value + location } end end # returns a set of offsets relative to the top-left most piece of the rotation (by even or odd rows) # this is hard to explain. imagine we have this partial board: # 0 0 0 0 0 x [positions 0-5] # 0 0 1 1 0 x [positions 6-11] # 0 0 1 0 0 x [positions 12-17] # 0 1 0 0 0 x [positions 18-23] # 0 1 0 0 0 x [positions 24-29] # 0 0 0 0 0 x [positions 30-35] # ... # The top-left of the piece is at position 8, the # board would be passed as a set of positions (values array) containing [8,9,14,19,25] not necessarily in that # sorted order. Since that array starts on an odd row, the offsets for an odd row are: [0,1,6,11,17] obtained # by subtracting 8 from everything. Now imagine the piece shifted up and to the right so it's on an even row: # 0 0 0 1 1 x [positions 0-5] # 0 0 1 0 0 x [positions 6-11] # 0 0 1 0 0 x [positions 12-17] # 0 1 0 0 0 x [positions 18-23] # 0 0 0 0 0 x [positions 24-29] # 0 0 0 0 0 x [positions 30-35] # ... # Now the positions are [3,4,8,14,19] which after subtracting the lowest value (3) gives [0,1,5,11,16] thus, the # offsets for this particular piece are (in even, odd order) [0,1,5,11,16],[0,1,6,11,17] which is what # this function would return def normalize_offsets( values) min = values.min even_min = is_even(min) other_min = even_min ? min + 6 : min + 7 other_values = values.collect do | value | if is_even(value) then value + 6 - other_min else value + 7 - other_min end end values.collect! { | value | value - min } if even_min then [values, other_values] else [other_values, values] end end # produce a bitmask representation of an array of offset locations def mask_for_offsets( offsets ) mask = 0 offsets.each { | value | mask = mask + ( 1 << value ) } mask end # finds a "safe" position that a position as described by a list of directions can be placed # without falling off any edge of the board. the values returned a location to place the first piece # at so it will fit after making the described moves def start_adjust( directions ) south = east = 0; directions.each do | direction | east += 1 if ( direction == :sw || direction == :nw || direction == :west ) south += 1 if ( direction == :nw || direction == :ne ) end south * 6 + east end # given a set of directions places the piece (as defined by a set of directions) on the board at # a location that will not take it off the edge def get_values ( directions ) start = start_adjust(directions) values = [ start ] directions.each do | direction | if (start % 12 >= 6) then start += @@rotation_odd_adder[direction] else start += @@rotation_even_adder[direction] end values += [ start ] end # some moves take you back to an existing location, we'll strip duplicates values.uniq end end # describes a piece and caches information about its rotations to as to be efficient for iteration # ATTRIBUTES: # rotations -- all the rotations of the piece # type -- a numeic "name" of the piece # masks -- an array by location of all legal rotational masks (a n inner array) for that location # placed -- the mask that this piece was last placed at (not a location, but the actual mask used) class Piece attr_reader :rotations, :type, :masks attr_accessor :placed # transform hashes that change one direction into another when you either flip or rotate a set of directions @@flip_converter = { :west => :west, :east => :east, :nw => :sw, :ne => :se, :sw => :nw, :se => :ne } @@rotate_converter = { :west => :nw, :east => :se, :nw => :ne, :ne => :east, :sw => :west, :se => :sw } def initialize( directions, type ) @type = type @rotations = Array.new(); @map = {} generate_rotations( directions ) directions.collect! { | value | @@flip_converter[value] } generate_rotations( directions ) # creates the masks AND a map that returns [location, rotation] for any given mask # this is used when a board is found and we want to draw it, otherwise the map is unused @masks = Array.new(); 0.upto(59) do | i | even = true @masks[i] = @rotations.collect do | rotation | mask = rotation.start_masks[i] @map[mask[0]] = [ i, rotation ] if (mask) mask || nil end @masks[i].compact! end end # rotates a set of directions through all six angles and adds a Rotation to the list for each one def generate_rotations( directions ) 6.times do rotations.push( Rotation.new(directions)) directions.collect! { | value | @@rotate_converter[value] } end end # given a board string, adds this piece to the board at whatever location/rotation # important: the outbound board string is 5 wide, the normal location notation is six wide (padded) def fill_string( board_string) location, rotation = @map[@placed] rotation.offsets(location).each do | offset | row, col = offset.divmod(6) board_string[ row*5 + col, 1 ] = @type.to_s end end end # a blank bit board having this form: # # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 0 0 0 0 0 1 # 1 1 1 1 1 1 # # where left lest significant bit is the top left and the most significant is the lower right # the actual board only consists of the 0 places, the 1 places are blockers to keep things from running # off the edges or bottom def blank_board 0b111111100000100000100000100000100000100000100000100000100000100000 end def full_board 0b111111111111111111111111111111111111111111111111111111111111111111 end # determines if a location (bit position) is in an even row def is_even( location) (location % 12) < 6 end # support function that create three utility maps: # $converter -- for each row an array that maps a five bit row (via array mapping) # to the a a five bit representation of the bits below it # $bit_count -- maps a five bit row (via array mapping) to the number of 1s in the row # @@new_regions -- maps a five bit row (via array mapping) to an array of "region" arrays # a region array has three values the first is a mask of bits in the region, # the second is the count of those bits and the third is identical to the first # examples: # 0b10010 => [ 0b01100, 2, 0b01100 ], [ 0b00001, 1, 0b00001] # 0b01010 => [ 0b10000, 1, 0b10000 ], [ 0b00100, 1, 0b00100 ], [ 0b00001, 1, 0b00001] # 0b10001 => [ 0b01110, 3, 0b01110 ] def create_collector_support odd_map = [0b11, 0b110, 0b1100, 0b11000, 0b10000] even_map = [0b1, 0b11, 0b110, 0b1100, 0b11000] all_odds = Array.new(0b100000) all_evens = Array.new(0b100000) bit_counts = Array.new(0b100000) new_regions = Array.new(0b100000) 0.upto(0b11111) do | i | bit_count = odd = even = 0 0.upto(4) do | bit | if (i[bit] == 1) then bit_count += 1 odd |= odd_map[bit] even |= even_map[bit] end end all_odds[i] = odd all_evens[i] = even bit_counts[i] = bit_count new_regions[i] = create_regions( i) end $converter = [] 10.times { | row | $converter.push((row % 2 == 0) ? all_evens : all_odds) } $bit_counts = bit_counts $regions = new_regions.collect { | set | set.collect { | value | [ value, bit_counts[value], value] } } end # determines if a board is punable, meaning that there is no possibility that it # can be filled up with pieces. A board is prunable if there is a grouping of unfilled spaces # that are not a multiple of five. The following board is an example of a prunable board: # 0 0 1 0 0 # 0 1 0 0 0 # 1 1 0 0 0 # 0 1 0 0 0 # 0 0 0 0 0 # ... # # This board is prunable because the top left corner is only 3 bits in area, no piece will ever fit it # parameters: # board -- an initial bit board (6 bit padded rows, see blank_board for format) # location -- starting location, everything above and to the left is already full # slotting -- set to true only when testing initial pieces, when filling normally # additional assumptions are possible # # Algorithm: # The algorithm starts at the top row (as determined by location) and iterates a row at a time # maintainng counts of active open areas (kept in the collector array) each collector contains # three values at the start of an iteration: # 0: mask of bits that would be adjacent to the collector in this row # 1: the number of bits collected so far # 2: a scratch space starting as zero, but used during the computation to represent # the empty bits in the new row that are adjacent (position 0) # The exact procedure is described in-code def prunable( board, location, slotting = false) collectors = [] # loop across the rows (location / 6).to_i.upto(9) do | row_on | # obtain a set of regions representing the bits of the current row. regions = $regions[(board >> (row_on * 6)) & 0b11111] converter = $converter[row_on] # track the number of collectors at the start of the cycle so that # we don't compute against newly created collectors, only existing collectors initial_collector_count = collectors.length # loop against the regions. For each region of the row # we will see if it connects to one or more existing collectors. # if it connects to 1 collector, the bits from the region are added to the # bits of the collector and the mask is placed in collector[2] # If the region overlaps more than one collector then all the collectors # it overlaps with are merged into the first one (the others are set to nil in the array) # if NO collectors are found then the region is copied as a new collector regions.each do | region | collector_found = nil region_mask = region[2] initial_collector_count.times do | collector_num | collector = collectors[collector_num] if (collector) then collector_mask = collector[0] if (collector_mask & region_mask != 0) then if (collector_found) then collector_found[0] |= collector_mask collector_found[1] += collector[1] collector_found[2] |= collector[2] collectors[collector_num] = nil else collector_found = collector collector[1] += region[1] collector[2] |= region_mask end end end end if (collector_found == nil) then collectors.push(Array.new(region)) end end # check the existing collectors, if any collector overlapped no bits in the region its [2] value will # be zero. The size of any such reaason is tested if it is not a multiple of five true is returned since # the board is prunable. if it is a multiple of five it is removed. # Collector that are still active have a new adjacent value [0] set based n the matched bits # and have [2] cleared out for the next cycle. collectors.length.times do | collector_num | collector = collectors[collector_num] if (collector) then if (collector[2] == 0) then return true if (collector[1] % 5 != 0) collectors[collector_num] = nil else # if a collector matches all bits in the row then we can return unprunable early for the # following reasons: # 1) there can be no more unavailable bits bince we fill from the top left downward # 2) all previous regions have been closed or joined so only this region can fail # 3) this region must be good since there can never be only 1 region that is nuot # a multiple of five # this rule only applies when filling normally, so we ignore the rule if we are "slotting" # in pieces to see what configurations work for them (the only other time this algorithm is used). return false if (collector[2] == 0b11111 && !slotting) collector[0] = converter[collector[2]] collector[2] = 0 end end end # get rid of all the empty converters for the next round collectors.compact! end return false if (collectors.length <= 1) # 1 collector or less and the region is fine collectors.any? { | collector | (collector[1] % 5) != 0 } # more than 1 and we test them all for bad size end # creates a region given a row mask. see prunable for what a "region" is def create_regions( value ) regions = [] cur_region = 0 5.times do | bit | if (value[bit] == 0) then cur_region |= 1 << bit else if (cur_region != 0 ) then regions.push( cur_region) cur_region = 0; end end end regions.push(cur_region) if (cur_region != 0) regions end # find up to the counted number of solutions (or all solutions) and prints the final result def find_all find_top( 1) find_top( 0) print_results end # show the board def print_results print "#{@boards_found} solutions found\n\n" print_full_board( @min_board) print "\n" print_full_board( @max_board) print "\n" end # finds solutions. This special version of the main function is only used for the top level # the reason for it is basically to force a particular ordering on how the rotations are tested for # the first piece. It is called twice, first looking for placements of the odd rotations and then # looking for placements of the even locations. # # WHY? # Since any found solution has an inverse we want to maximize finding solutions that are not already found # as an inverse. The inverse will ALWAYS be 3 one of the piece configurations that is exactly 3 rotations away # (an odd number). Checking even vs odd then produces a higher probability of finding more pieces earlier # in the cycle. We still need to keep checking all the permutations, but our probability of finding one will # diminsh over time. Since we are TOLD how many to search for this lets us exit before checking all pieces # this bennifit is very great when seeking small numbers of solutions and is 0 when looking for more than the # maximum number def find_top( rotation_skip) board = blank_board (@pieces.length-1).times do piece = @pieces.shift piece.masks[0].each do | mask, imask, cmask | if ((rotation_skip += 1) % 2 == 0) then piece.placed = mask find( 1, 1, board | mask) end end @pieces.push(piece) end piece = @pieces.shift @pieces.push(piece) end # the normail find routine, iterates through the available pieces, checks all rotations at the current location # and adds any boards found. depth is acheived via recursion. the overall approach is described # here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/ # parameters: # start_location -- where to start looking for place for the next piece at # placed -- number of pieces placed # board -- current state of the board # # see in-code comments def find( start_location, placed, board) # find the next location to place a piece by looking for an empty bit while board[start_location] == 1 start_location += 1 end @pieces.length.times do piece = @pieces.shift piece.masks[start_location].each do | mask, imask, cmask | if ( board & cmask == imask) then piece.placed = mask if (placed == 9) then add_board else find( start_location + 1, placed + 1, board | mask) end end end @pieces.push(piece) end end # print the board def print_full_board( board_string) 10.times do | row | print " " if (row % 2 == 1) 5.times do | col | print "#{board_string[row*5 + col,1]} " end print "\n" end end # when a board is found we "draw it" into a string and then flip that string, adding both to # the list (hash) of solutions if they are unique. def add_board board_string = "99999999999999999999999999999999999999999999999999" @all_pieces.each { | piece | piece.fill_string( board_string ) } save( board_string) save( board_string.reverse) end # adds a board string to the list (if new) and updates the current best/worst board def save( board_string) if (@all_boards[board_string] == nil) then @min_board = board_string if (board_string < @min_board) @max_board = board_string if (board_string > @max_board) @all_boards.store(board_string,true) @boards_found += 1 # the exit motif is a time saver. Ideally the function should return, but those tests # take noticeable time (performance). if (@boards_found == @stop_count) then print_results exit(0) end end end ## ## MAIN BODY :) ## create_collector_support @pieces = [ Piece.new( [ :nw, :ne, :east, :east ], 2), Piece.new( [ :ne, :se, :east, :ne ], 7), Piece.new( [ :ne, :east, :ne, :nw ], 1), Piece.new( [ :east, :sw, :sw, :se ], 6), Piece.new( [ :east, :ne, :se, :ne ], 5), Piece.new( [ :east, :east, :east, :se ], 0), Piece.new( [ :ne, :nw, :se, :east, :se ], 4), Piece.new( [ :se, :se, :se, :west ], 9), Piece.new( [ :se, :se, :east, :se ], 8), Piece.new( [ :east, :east, :sw, :se ], 3) ]; @all_pieces = Array.new( @pieces) @min_board = "99999999999999999999999999999999999999999999999999" @max_board = "00000000000000000000000000000000000000000000000000" @stop_count = ARGV[0].to_i || 2089 @all_boards = {} @boards_found = 0 find_all ######## DO IT!!! ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.539111218 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.52401584 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.596010371 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.54692886 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.7483598 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.50804004 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.500482281 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.549040326 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.488531007 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.669332974 built-ruby 3.574238043 built-ruby 3.79277001 built-ruby 3.617403589 built-ruby 3.57616608 built-ruby 3.608409673 built-ruby 3.584869406 built-ruby 3.795895512 built-ruby 3.616900879 built-ruby 3.598477039 built-ruby 3.791426742 ----------------------------------------------------------- so_nbody # The Computer Language Shootout # http://shootout.alioth.debian.org # # Optimized for Ruby by Jesse Millikan # From version ported by Michael Neumann from the C gcc version, # which was written by Christoph Bauer. SOLAR_MASS = 4 * Math::PI**2 DAYS_PER_YEAR = 365.24 def _puts *args end class Planet attr_accessor :x, :y, :z, :vx, :vy, :vz, :mass def initialize(x, y, z, vx, vy, vz, mass) @x, @y, @z = x, y, z @vx, @vy, @vz = vx * DAYS_PER_YEAR, vy * DAYS_PER_YEAR, vz * DAYS_PER_YEAR @mass = mass * SOLAR_MASS end def move_from_i(bodies, nbodies, dt, i) while i < nbodies b2 = bodies[i] dx = @x - b2.x dy = @y - b2.y dz = @z - b2.z distance = Math.sqrt(dx * dx + dy * dy + dz * dz) mag = dt / (distance * distance * distance) b_mass_mag, b2_mass_mag = @mass * mag, b2.mass * mag @vx -= dx * b2_mass_mag @vy -= dy * b2_mass_mag @vz -= dz * b2_mass_mag b2.vx += dx * b_mass_mag b2.vy += dy * b_mass_mag b2.vz += dz * b_mass_mag i += 1 end @x += dt * @vx @y += dt * @vy @z += dt * @vz end end def energy(bodies) e = 0.0 nbodies = bodies.size for i in 0 ... nbodies b = bodies[i] e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz) for j in (i + 1) ... nbodies b2 = bodies[j] dx = b.x - b2.x dy = b.y - b2.y dz = b.z - b2.z distance = Math.sqrt(dx * dx + dy * dy + dz * dz) e -= (b.mass * b2.mass) / distance end end e end def offset_momentum(bodies) px, py, pz = 0.0, 0.0, 0.0 for b in bodies m = b.mass px += b.vx * m py += b.vy * m pz += b.vz * m end b = bodies[0] b.vx = - px / SOLAR_MASS b.vy = - py / SOLAR_MASS b.vz = - pz / SOLAR_MASS end BODIES = [ # sun Planet.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0), # jupiter Planet.new( 4.84143144246472090e+00, -1.16032004402742839e+00, -1.03622044471123109e-01, 1.66007664274403694e-03, 7.69901118419740425e-03, -6.90460016972063023e-05, 9.54791938424326609e-04), # saturn Planet.new( 8.34336671824457987e+00, 4.12479856412430479e+00, -4.03523417114321381e-01, -2.76742510726862411e-03, 4.99852801234917238e-03, 2.30417297573763929e-05, 2.85885980666130812e-04), # uranus Planet.new( 1.28943695621391310e+01, -1.51111514016986312e+01, -2.23307578892655734e-01, 2.96460137564761618e-03, 2.37847173959480950e-03, -2.96589568540237556e-05, 4.36624404335156298e-05), # neptune Planet.new( 1.53796971148509165e+01, -2.59193146099879641e+01, 1.79258772950371181e-01, 2.68067772490389322e-03, 1.62824170038242295e-03, -9.51592254519715870e-05, 5.15138902046611451e-05) ] init = 200_000 # ARGV[0] n = Integer(init) offset_momentum(BODIES) puts "%.9f" % energy(BODIES) nbodies = BODIES.size dt = 0.01 n.times do i = 0 while i < nbodies b = BODIES[i] b.move_from_i(BODIES, nbodies, dt, i + 1) i += 1 end end puts "%.9f" % energy(BODIES) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.799341851 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.84187245 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.849474055 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.829923001 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.81606694 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.850065299 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.839618453 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.835618869 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.81173072 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.837271516 built-ruby 1.841680993 built-ruby 1.87570239 built-ruby 1.852583055 built-ruby 1.857353529 built-ruby 1.822175475 built-ruby 1.79752561 built-ruby 1.826490123 built-ruby 1.857684808 built-ruby 1.839381025 built-ruby 1.871195009 ----------------------------------------------------------- so_nested_loop #!/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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.241936631 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.233325736 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.216927163 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.220863351 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.224486767 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.257400695 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.25409484 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.237586824 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.214261805 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.223434544 built-ruby 1.255694223 built-ruby 1.264977089 built-ruby 1.25294393 built-ruby 1.256114407 built-ruby 1.30348532 built-ruby 1.244115411 built-ruby 1.251923789 built-ruby 1.254956984 built-ruby 1.249349645 built-ruby 1.247176487 ----------------------------------------------------------- so_nsieve # The Computer Language Shootout # http://shootout.alioth.debian.org/ # # contributed by Glenn Parker, March 2005 # modified by Evan Phoenix, Sept 2006 def sieve(m) flags = Flags.dup[0,m] count = 0 pmax = m - 1 p = 2 while p <= pmax unless flags[p].zero? count += 1 mult = p while mult <= pmax flags[mult] = 0 mult += p end end p += 1 end count end n = 9 # (ARGV[0] || 2).to_i Flags = ("\x1" * ( 2 ** n * 10_000)).unpack("c*") n.downto(n-2) do |exponent| break if exponent < 0 m = (1 << exponent) * 10_000 # m = (2 ** exponent) * 10_000 count = sieve(m) printf "Primes up to %8d %8d\n", m, count end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.294285008 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.281652935 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.243004021 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.266685903 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.251648936 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.236178955 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.327893933 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.337473304 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.379210389 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.436047954 built-ruby 2.254877976 built-ruby 2.248618125 built-ruby 2.233529855 built-ruby 2.331283273 built-ruby 2.242122568 built-ruby 2.39487297 built-ruby 2.236972278 built-ruby 2.257717109 built-ruby 2.244886138 built-ruby 2.32727913 ----------------------------------------------------------- so_nsieve_bits #!/usr/bin/ruby #coding: us-ascii # # The Great Computer Language Shootout # http://shootout.alioth.debian.org/ # # nsieve-bits in Ruby # Contributed by Glenn Parker, March 2005 CharExponent = 3 BitsPerChar = 1 << CharExponent LowMask = BitsPerChar - 1 def sieve(m) items = "\xFF" * ((m / BitsPerChar) + 1) masks = "" BitsPerChar.times do |b| masks << (1 << b).chr end count = 0 pmax = m - 1 2.step(pmax, 1) do |p| if items[p >> CharExponent][p & LowMask] == 1 count += 1 p.step(pmax, p) do |mult| a = mult >> CharExponent b = mult & LowMask items[a] -= masks[b] if items[a][b] != 0 end end end count end n = 9 # (ARGV[0] || 2).to_i n.step(n - 2, -1) do |exponent| break if exponent < 0 m = 2 ** exponent * 10_000 count = sieve(m) printf "Primes up to %8d %8d\n", m, count end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.315316338 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.407213915 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.416510858 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.424920419 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.422238782 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.421162976 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.385343074 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.350320783 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.447255839 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.321905561 built-ruby 2.472184182 built-ruby 2.640313748 built-ruby 2.458189642 built-ruby 2.451787338 built-ruby 2.539691078 built-ruby 2.418226028 built-ruby 2.446858402 built-ruby 2.523097249 built-ruby 2.365247171 built-ruby 2.389753791 ----------------------------------------------------------- so_object #!/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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.754261041 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.749572766 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.7168087 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.787807228 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.743405289 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.735140274 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.7639707 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.769323708 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.723677742 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.731285619 built-ruby 0.748005104 built-ruby 0.748830155 built-ruby 0.759103253 built-ruby 0.767117176 built-ruby 0.764509494 built-ruby 0.769353212 built-ruby 0.736920418 built-ruby 0.756762563 built-ruby 0.749479077 built-ruby 0.741593539 ----------------------------------------------------------- so_partial_sums n = 2_500_000 # (ARGV.shift || 1).to_i alt = 1.0 ; s0 = s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = 0.0 1.upto(n) do |d| d = d.to_f ; d2 = d * d ; d3 = d2 * d ; ds = Math.sin(d) ; dc = Math.cos(d) s0 += (2.0 / 3.0) ** (d - 1.0) s1 += 1.0 / Math.sqrt(d) s2 += 1.0 / (d * (d + 1.0)) s3 += 1.0 / (d3 * ds * ds) s4 += 1.0 / (d3 * dc * dc) s5 += 1.0 / d s6 += 1.0 / d2 s7 += alt / d s8 += alt / (2.0 * d - 1.0) alt = -alt end if false printf("%.9f\t(2/3)^k\n", s0) printf("%.9f\tk^-0.5\n", s1) printf("%.9f\t1/k(k+1)\n", s2) printf("%.9f\tFlint Hills\n", s3) printf("%.9f\tCookson Hills\n", s4) printf("%.9f\tHarmonic\n", s5) printf("%.9f\tRiemann Zeta\n", s6) printf("%.9f\tAlternating Harmonic\n", s7) printf("%.9f\tGregory\n", s8) end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.939763724 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.89934002 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.866649522 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.913549557 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.888284487 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.885594804 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.068903043 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.906423573 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.868201551 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.875169538 built-ruby 2.838501351 built-ruby 2.88155547 built-ruby 2.908225932 built-ruby 2.832095947 built-ruby 2.790760115 built-ruby 2.86470467 built-ruby 2.781539189 built-ruby 2.795186517 built-ruby 2.883306735 built-ruby 2.808574187 ----------------------------------------------------------- so_pidigits # The Great Computer Language Shootout # http://shootout.alioth.debian.org/ # # contributed by Gabriele Renzi class PiDigitSpigot def initialize() @z = Transformation.new 1,0,0,1 @x = Transformation.new 0,0,0,0 @inverse = Transformation.new 0,0,0,0 end def next! @y = @z.extract(3) if safe? @y @z = produce(@y) @y else @z = consume @x.next!() next!() end end def safe?(digit) digit == @z.extract(4) end def produce(i) @inverse.qrst(10,-10*i,0,1).compose(@z) end def consume(a) @z.compose(a) end end class Transformation attr_reader :q, :r, :s, :t def initialize (q, r, s, t) @q,@r,@s,@t,@k = q,r,s,t,0 end def next!() @q = @k = @k + 1 @r = 4 * @k + 2 @s = 0 @t = 2 * @k + 1 self end def extract(j) (@q * j + @r) / (@s * j + @t) end def compose(a) self.class.new( @q * a.q, @q * a.r + r * a.t, @s * a.q + t * a.s, @s * a.r + t * a.t ) end def qrst *args initialize *args self end end WIDTH = 10 n = 2_500 # Integer(ARGV[0]) j = 0 digits = PiDigitSpigot.new while n > 0 if n >= WIDTH WIDTH.times {print digits.next!} j += WIDTH else n.times {print digits.next!} (WIDTH-n).times {print " "} j += n end puts "\t:"+j.to_s n -= WIDTH end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.63821205 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.64044663 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.640465308 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.64132744 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.638929905 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.643527592 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.638628529 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.63954726 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.638801458 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.639428985 built-ruby 0.636953266 built-ruby 0.638127095 built-ruby 0.636291221 built-ruby 0.636611608 built-ruby 0.636589001 built-ruby 0.640398086 built-ruby 0.63819013 built-ruby 0.638555277 built-ruby 0.637816214 built-ruby 0.64065374 ----------------------------------------------------------- so_random # 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 = 3_000_000 i = 0 while i/ if seq.length != 0 revcomp(seq.join) seq=Array.new end puts $_ else $_.sub(/\n/,'') seq.push $_ end end revcomp(seq.join) ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.539057344 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.538307832 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.548669829 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.534341308 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.5387205 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.531383652 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.528836218 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.534693442 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.531372477 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.536758125 built-ruby 1.555258616 built-ruby 1.544850275 built-ruby 1.546377385 built-ruby 1.545684506 built-ruby 1.54355092 built-ruby 1.541850832 built-ruby 1.570531494 built-ruby 1.624307692 built-ruby 1.546563614 built-ruby 1.549007168 ----------------------------------------------------------- so_sieve # from http://www.bagley.org/~doug/shootout/bench/sieve/sieve.ruby num = 500 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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.621136517 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.639223485 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.620247885 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.628891104 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.62716846 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.642246855 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.621416619 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.625823561 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.649607916 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.620395338 built-ruby 0.613447442 built-ruby 0.639813685 built-ruby 0.6267636 built-ruby 0.621859655 built-ruby 0.616782328 built-ruby 0.640797933 built-ruby 0.625220894 built-ruby 0.615339487 built-ruby 0.621045886 built-ruby 0.636341641 ----------------------------------------------------------- so_spectralnorm # The Computer Language Shootout # http://shootout.alioth.debian.org/ # Contributed by Sokolov Yura def eval_A(i,j) return 1.0/((i+j)*(i+j+1)/2+i+1) end def eval_A_times_u(u) v, i = nil, nil (0..u.length-1).collect { |i| v = 0 for j in 0..u.length-1 v += eval_A(i,j)*u[j] end v } end def eval_At_times_u(u) v, i = nil, nil (0..u.length-1).collect{|i| v = 0 for j in 0..u.length-1 v += eval_A(j,i)*u[j] end v } end def eval_AtA_times_u(u) return eval_At_times_u(eval_A_times_u(u)) end n = 500 # ARGV[0].to_i u=[1]*n for i in 1..10 v=eval_AtA_times_u(u) u=eval_AtA_times_u(v) end vBv=0 vv=0 for i in 0..n-1 vBv += u[i]*v[i] vv += v[i]*v[i] end str = "%0.9f" % (Math.sqrt(vBv/vv)), "\n" # print str ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.496116364 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.487788415 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.504159529 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.484176439 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.519259642 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.526467425 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.472999324 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.45407107 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.465526168 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.398941509 built-ruby 2.297059996 built-ruby 2.308222003 built-ruby 2.289032971 built-ruby 2.267067434 built-ruby 2.303815108 built-ruby 2.333067826 built-ruby 2.258365422 built-ruby 2.280507581 built-ruby 2.311777461 built-ruby 2.324072055 ----------------------------------------------------------- vm1_attr_ivar class C attr_reader :a, :b def initialize @a = nil @b = nil end end obj = C.new i = 0 while i<30_000_000 # while loop 1 i += 1 j = obj.a k = obj.b end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.51966587 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.522413326 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.563621097 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.624339685 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.52060048 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.52857923 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.531779716 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.509480744 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.526722672 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.510491894 built-ruby 2.117946696 built-ruby 2.035884998 built-ruby 2.065508159 built-ruby 2.065555181 built-ruby 2.035492983 built-ruby 1.767966621 built-ruby 2.02637861 built-ruby 2.08062807 built-ruby 2.06514877 built-ruby 1.493664032 ----------------------------------------------------------- vm1_attr_ivar_set class C attr_accessor :a, :b def initialize @a = nil @b = nil end end obj = C.new i = 0 while i<30_000_000 # while loop 1 i += 1 obj.a = 1 obj.b = 2 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.818704437 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.842031862 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.826180486 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.849834971 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.838703817 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.826228588 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.891226528 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.853157792 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.818275004 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.831204282 built-ruby 1.832283244 built-ruby 1.841066287 built-ruby 1.964267992 built-ruby 1.853031514 built-ruby 1.95956251 built-ruby 1.848618482 built-ruby 1.913461268 built-ruby 1.889492008 built-ruby 1.918673342 built-ruby 1.845251399 ----------------------------------------------------------- vm1_block def m yield end i = 0 while i<30_000_000 # while loop 1 i += 1 m{ } end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.707923708 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.731367336 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.608328052 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.690321188 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.948255809 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.689793512 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.800429371 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.697618829 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.573578384 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.75442289 built-ruby 2.923039941 built-ruby 2.784192842 built-ruby 2.844498965 built-ruby 2.810101842 built-ruby 2.729091287 built-ruby 2.578962184 built-ruby 2.720380448 built-ruby 2.703453874 built-ruby 2.579669615 built-ruby 2.713521441 ----------------------------------------------------------- vm1_const Const = 1 i = 0 while i<30_000_000 # while loop 1 i += 1 j = Const k = Const end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.30953717 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.953617025 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.953563828 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.953431719 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.953377855 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.952548776 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.953554601 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.957060194 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.31688164 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.953681754 built-ruby 0.955356092 built-ruby 0.958710861 built-ruby 0.954859438 built-ruby 0.954864513 built-ruby 0.976808446 built-ruby 0.956771116 built-ruby 0.954883606 built-ruby 0.95654101 built-ruby 0.955537957 built-ruby 0.959087941 ----------------------------------------------------------- vm1_ensure i = 0 while i<30_000_000 # benchmark loop 1 i += 1 begin begin ensure end ensure end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.690803292 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.692764851 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.690539055 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.695228305 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.688986272 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.689272852 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.690200836 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.691485911 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.691956178 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.694465586 built-ruby 0.689891176 built-ruby 0.689914965 built-ruby 0.691929585 built-ruby 0.689771085 built-ruby 0.690639641 built-ruby 0.692338675 built-ruby 0.690571213 built-ruby 0.689602142 built-ruby 0.685198577 built-ruby 0.689754812 ----------------------------------------------------------- vm1_float_simple i = 0.0; f = 0.0 while i<30_000_000 i += 1 f += 0.1; f -= 0.1 f += 0.1; f -= 0.1 f += 0.1; f -= 0.1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 5.71446854 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 5.864905132 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 6.034185788 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 5.835228093 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 5.759906267 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 5.94566944 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 5.879862983 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 6.128341987 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 6.195056816 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 6.048346723 built-ruby 6.208011991 built-ruby 6.028059423 built-ruby 6.069889565 built-ruby 6.072863437 built-ruby 5.788695017 built-ruby 5.999257781 built-ruby 6.004277136 built-ruby 5.946714033 built-ruby 6.181818986 built-ruby 6.177091184 ----------------------------------------------------------- vm1_gc_short_lived i = 0 while i<30_000_000 # while loop 1 a = '' # short-lived String b = '' c = '' d = '' e = '' f = '' i+=1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.103935384 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.047508148 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.07458451 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.095025464 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.03229508 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.256236512 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.050023527 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.9973488 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.087311955 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.279700075 built-ruby 12.044630632 built-ruby 12.054619454 built-ruby 12.099194455 built-ruby 12.077634895 built-ruby 11.998198574 built-ruby 12.032336992 built-ruby 12.060600977 built-ruby 12.253604193 built-ruby 12.056261374 built-ruby 12.156230927 ----------------------------------------------------------- vm1_gc_short_with_complex_long def nested_hash h, n if n == 0 '' else 10.times{ h[Object.new] = nested_hash(h, n-1) } end end long_lived = Hash.new nested_hash long_lived, 6 GC.start GC.start i = 0 while i<30_000_000 # while loop 1 a = '' # short-lived String b = '' c = '' d = '' e = '' f = '' i+=1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.143090004 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.063903768 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.274061198 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.959445323 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.984994385 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.134151905 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.04259934 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.00448181 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.244458934 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 14.050325462 built-ruby 14.645018071 built-ruby 14.74406768 built-ruby 14.72855257 built-ruby 14.719624902 built-ruby 14.700953152 built-ruby 14.713752018 built-ruby 15.015210415 built-ruby 14.728951861 built-ruby 14.728405965 built-ruby 14.78233742 ----------------------------------------------------------- vm1_gc_short_with_long long_lived = Array.new(1_000_000){|i| "#{i}"} GC.start GC.start i = 0 while i<30_000_000 # while loop 1 a = '' # short-lived String b = '' c = '' d = '' e = '' f = '' i+=1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.135230748 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.089302674 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.994314911 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.081328582 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.154823187 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.129842893 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.100826945 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.040389308 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.343270682 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.056902135 built-ruby 13.215269491 built-ruby 13.203161095 built-ruby 13.0397638 built-ruby 13.096846951 built-ruby 13.143872337 built-ruby 12.990232646 built-ruby 13.12068113 built-ruby 13.401003767 built-ruby 13.234621349 built-ruby 13.062878415 ----------------------------------------------------------- vm1_gc_short_with_symbol # make many symbols 50_000.times{|i| sym = "sym#{i}".to_sym} GC.start GC.start i = 0 while i<30_000_000 # while loop 1 a = '' # short-lived String b = '' c = '' d = '' e = '' f = '' i+=1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.021750111 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.023958762 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.049305602 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.100388031 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.072279705 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.06697235 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.327492795 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.016082912 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.080044818 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.356864616 built-ruby 12.082417599 built-ruby 12.052217828 built-ruby 12.102523461 built-ruby 12.151430666 built-ruby 12.378410258 built-ruby 12.080441099 built-ruby 12.05511421 built-ruby 14.137308566 built-ruby 12.091990303 built-ruby 12.089307419 ----------------------------------------------------------- vm1_gc_wb_ary long_lived = [] GC.start GC.start i = 0 short_lived = '' while i<30_000_000 # while loop 1 long_lived[0] = short_lived # write barrier i+=1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.370004393 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.363470145 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.360773107 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.366501428 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.365756639 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.367915131 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.338852658 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.367230192 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.357988359 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.377908179 built-ruby 1.354029674 built-ruby 1.358725313 built-ruby 1.373287805 built-ruby 1.360912706 built-ruby 1.358468983 built-ruby 1.35239174 built-ruby 1.357872899 built-ruby 1.347007041 built-ruby 1.355649501 built-ruby 1.362087127 ----------------------------------------------------------- vm1_gc_wb_obj class C attr_accessor :foo end long_lived = C.new GC.start GC.start i = 0 short_lived = '' while i<30_000_000 # while loop 1 long_lived.foo = short_lived # write barrier i+=1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.367974321 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.346896684 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.412457106 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.393100887 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.362286829 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.33710947 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.358527348 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.416319777 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.36061233 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.721319482 built-ruby 1.373734863 built-ruby 1.369230696 built-ruby 1.405751915 built-ruby 1.526228538 built-ruby 1.402388417 built-ruby 1.385725011 built-ruby 1.367667536 built-ruby 1.397660519 built-ruby 1.522252139 built-ruby 1.491527587 ----------------------------------------------------------- vm1_ivar @a = 1 i = 0 while i<30_000_000 # while loop 1 i += 1 j = @a k = @a end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.115287573 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.118513405 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.138144556 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.276426776 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.085676454 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.111116858 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.115494402 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.097896449 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.104248382 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.123434922 built-ruby 1.012900867 built-ruby 1.272693173 built-ruby 1.012450694 built-ruby 1.311064002 built-ruby 1.006340948 built-ruby 1.291006875 built-ruby 1.016537527 built-ruby 1.012398198 built-ruby 1.02102678 built-ruby 1.017952281 ----------------------------------------------------------- vm1_ivar_set i = 0 while i<30_000_000 # while loop 1 i += 1 @a = 1 @b = 2 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.160671144 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.167772975 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.163586048 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.167826809 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.162151755 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.156081161 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.164624474 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.176970341 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.16213741 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.162066713 built-ruby 1.161623814 built-ruby 1.407421509 built-ruby 1.295112754 built-ruby 1.176440107 built-ruby 1.22798862 built-ruby 1.245943043 built-ruby 1.534114753 built-ruby 1.321276268 built-ruby 1.164416707 built-ruby 1.530676979 ----------------------------------------------------------- vm1_length a = 'abc' b = [1, 2, 3] i = 0 while i<30_000_000 # while loop 1 i += 1 a.length b.length end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.317030732 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.311826233 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.337777782 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.322131645 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.313359131 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.313251489 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.312373632 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.313841409 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.31055721 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.315343577 built-ruby 1.318573949 built-ruby 1.308466675 built-ruby 1.308209493 built-ruby 1.339131542 built-ruby 1.42135744 built-ruby 1.308573728 built-ruby 1.313388659 built-ruby 1.307636523 built-ruby 1.317962332 built-ruby 1.307263644 ----------------------------------------------------------- vm1_lvar_init def m v unless v # unreachable code v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 = v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 = v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 = v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 = v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1 end end i = 0 while i<30_000_000 # while loop 1 i += 1 m i end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.634191659 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.937827262 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.625180301 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.773867721 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.8300536 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.609281934 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.651686465 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.727577336 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.491486046 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.816172779 built-ruby 2.681127686 built-ruby 2.444818038 built-ruby 2.601330054 built-ruby 2.505702245 built-ruby 2.450301009 built-ruby 2.447992429 built-ruby 2.615683872 built-ruby 2.470050352 built-ruby 2.449143228 built-ruby 2.52710399 ----------------------------------------------------------- vm1_lvar_set i = 0 while i<30_000_000 # while loop 1 i += 1 a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r = 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.00169442 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.014479649 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.994206834 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.018677585 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.988061984 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.930872317 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.157614884 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.019725614 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.994475303 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.996977815 built-ruby 3.008522895 built-ruby 3.008706591 built-ruby 2.997984384 built-ruby 2.996012397 built-ruby 2.997696119 built-ruby 3.018536675 built-ruby 2.998767265 built-ruby 3.00338167 built-ruby 3.011783332 built-ruby 3.014377965 ----------------------------------------------------------- vm1_neq i = 0 obj1 = Object.new obj2 = Object.new while i<30_000_000 # while loop 1 i += 1 obj1 != obj2 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.280721885 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.267474183 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.280482221 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.272018067 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.270434618 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.332204776 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.278145141 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.269753758 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.284644526 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.280935188 built-ruby 1.257893247 built-ruby 1.255465418 built-ruby 1.253611059 built-ruby 1.255544308 built-ruby 1.260500302 built-ruby 1.258071215 built-ruby 1.253960738 built-ruby 1.256293975 built-ruby 1.255967596 built-ruby 1.301667373 ----------------------------------------------------------- vm1_not i = 0 obj = Object.new while i<30_000_000 # while loop 1 i += 1 !obj end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.939750996 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.951937949 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.957942861 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.937701416 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.942335298 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.949600842 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.939012854 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.955103198 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.945281274 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.962689225 built-ruby 0.949519568 built-ruby 0.94443893 built-ruby 0.948054634 built-ruby 0.946527927 built-ruby 0.945857018 built-ruby 0.934410587 built-ruby 0.930984102 built-ruby 0.940710785 built-ruby 0.936375372 built-ruby 0.935043557 ----------------------------------------------------------- vm1_rescue i = 0 while i<30_000_000 # while loop 1 i += 1 begin rescue end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.78436844 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.788382357 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.785725758 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.785976274 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.786624214 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.784506347 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.788579711 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.785328864 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.785867478 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.78524471 built-ruby 0.788085448 built-ruby 0.790489334 built-ruby 0.787780748 built-ruby 0.797775538 built-ruby 0.787673484 built-ruby 0.787267083 built-ruby 0.788500886 built-ruby 0.785794766 built-ruby 0.787405097 built-ruby 0.787268903 ----------------------------------------------------------- vm1_simplereturn def m return 1 end i = 0 while i<30_000_000 # while loop 1 i += 1 m end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.634801199 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.624641045 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.589494777 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.607369327 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.60616045 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.623199766 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.608057029 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.610038279 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.669550572 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.609388966 built-ruby 1.60405475 built-ruby 1.606719219 built-ruby 1.612496054 built-ruby 1.610279745 built-ruby 1.608090794 built-ruby 1.617431555 built-ruby 1.614885145 built-ruby 1.611829406 built-ruby 1.626817328 built-ruby 1.609529619 ----------------------------------------------------------- vm1_swap a = 1 b = 2 i = 0 while i<30_000_000 # while loop 1 i += 1 a, b = b, a end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.928668712 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.928993553 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.915595912 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.927511074 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.929676067 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.928357265 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.929477355 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.932947245 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.932863592 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.92945402 built-ruby 0.93047087 built-ruby 0.927691063 built-ruby 0.930174251 built-ruby 0.930543435 built-ruby 0.929446024 built-ruby 0.930495439 built-ruby 0.929216847 built-ruby 0.929876058 built-ruby 0.920568414 built-ruby 0.929958819 ----------------------------------------------------------- vm1_yield def m i = 0 while i<30_000_000 # while loop 1 i += 1 yield end end m{} ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.568600904 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.573330217 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.566678304 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.605918397 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.583881613 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.730416807 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.582746018 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.591758334 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.586074896 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.574743376 built-ruby 1.648935693 built-ruby 1.675447231 built-ruby 1.607968592 built-ruby 1.617634121 built-ruby 1.643235958 built-ruby 1.598717332 built-ruby 1.608013712 built-ruby 1.604548086 built-ruby 1.636749855 built-ruby 1.635681297 ----------------------------------------------------------- vm2_array i = 0 while i<6_000_000 # benchmark loop 2 i += 1 a = [1,2,3,4,5,6,7,8,9,10] end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.121868712 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.112586546 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.112763548 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.115767768 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.15816565 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.097617395 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.128142269 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.126567071 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.11280276 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.130153864 built-ruby 1.105927095 built-ruby 1.111777607 built-ruby 1.099978608 built-ruby 1.135751279 built-ruby 1.129340741 built-ruby 1.134411547 built-ruby 1.090643426 built-ruby 1.105507474 built-ruby 1.09049991 built-ruby 1.10203191 ----------------------------------------------------------- vm2_bigarray i = 0 while i<6_000_000 # benchmark loop 2 i += 1 a = [ 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10, ] end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.273636049 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.247091414 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.286639115 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.137723916 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.178868409 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.412888053 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.290736945 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.319284389 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.252756361 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 11.224323997 built-ruby 11.310124975 built-ruby 11.266606111 built-ruby 11.225907824 built-ruby 11.467840455 built-ruby 11.373162058 built-ruby 11.378355992 built-ruby 11.305642637 built-ruby 11.326620392 built-ruby 11.318046103 built-ruby 11.28522997 ----------------------------------------------------------- vm2_bighash i = 0 while i<60_000 # benchmark loop 2 i += 1 a = {0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19, 20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29, 30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39, 40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49, 50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59, 60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69, 70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79, 80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89, 90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99, 100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109, 110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119, 120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126, 127=>127, 128=>128, 129=>129, 130=>130, 131=>131, 132=>132, 133=>133, 134=>134, 135=>135, 136=>136, 137=>137, 138=>138, 139=>139, 140=>140, 141=>141, 142=>142, 143=>143, 144=>144, 145=>145, 146=>146, 147=>147, 148=>148, 149=>149, 150=>150, 151=>151, 152=>152, 153=>153, 154=>154, 155=>155, 156=>156, 157=>157, 158=>158, 159=>159, 160=>160, 161=>161, 162=>162, 163=>163, 164=>164, 165=>165, 166=>166, 167=>167, 168=>168, 169=>169, 170=>170, 171=>171, 172=>172, 173=>173, 174=>174, 175=>175, 176=>176, 177=>177, 178=>178, 179=>179, 180=>180, 181=>181, 182=>182, 183=>183, 184=>184, 185=>185, 186=>186, 187=>187, 188=>188, 189=>189, 190=>190, 191=>191, 192=>192, 193=>193, 194=>194, 195=>195, 196=>196, 197=>197, 198=>198, 199=>199, 200=>200, 201=>201, 202=>202, 203=>203, 204=>204, 205=>205, 206=>206, 207=>207, 208=>208, 209=>209, 210=>210, 211=>211, 212=>212, 213=>213, 214=>214, 215=>215, 216=>216, 217=>217, 218=>218, 219=>219, 220=>220, 221=>221, 222=>222, 223=>223, 224=>224, 225=>225, 226=>226, 227=>227, 228=>228, 229=>229, 230=>230, 231=>231, 232=>232, 233=>233, 234=>234, 235=>235, 236=>236, 237=>237, 238=>238, 239=>239, 240=>240, 241=>241, 242=>242, 243=>243, 244=>244, 245=>245, 246=>246, 247=>247, 248=>248, 249=>249, 250=>250, 251=>251, 252=>252, 253=>253, 254=>254, 255=>255, 256=>256, 257=>257, 258=>258, 259=>259, 260=>260, 261=>261, 262=>262, 263=>263, 264=>264, 265=>265, 266=>266, 267=>267, 268=>268, 269=>269, 270=>270, 271=>271, 272=>272, 273=>273, 274=>274, 275=>275, 276=>276, 277=>277, 278=>278, 279=>279, 280=>280, 281=>281, 282=>282, 283=>283, 284=>284, 285=>285, 286=>286, 287=>287, 288=>288, 289=>289, 290=>290, 291=>291, 292=>292, 293=>293, 294=>294, 295=>295, 296=>296, 297=>297, 298=>298, 299=>299, 300=>300, 301=>301, 302=>302, 303=>303, 304=>304, 305=>305, 306=>306, 307=>307, 308=>308, 309=>309, 310=>310, 311=>311, 312=>312, 313=>313, 314=>314, 315=>315, 316=>316, 317=>317, 318=>318, 319=>319, 320=>320, 321=>321, 322=>322, 323=>323, 324=>324, 325=>325, 326=>326, 327=>327, 328=>328, 329=>329, 330=>330, 331=>331, 332=>332, 333=>333, 334=>334, 335=>335, 336=>336, 337=>337, 338=>338, 339=>339, 340=>340, 341=>341, 342=>342, 343=>343, 344=>344, 345=>345, 346=>346, 347=>347, 348=>348, 349=>349, 350=>350, 351=>351, 352=>352, 353=>353, 354=>354, 355=>355, 356=>356, 357=>357, 358=>358, 359=>359, 360=>360, 361=>361, 362=>362, 363=>363, 364=>364, 365=>365, 366=>366, 367=>367, 368=>368, 369=>369, 370=>370, 371=>371, 372=>372, 373=>373, 374=>374, 375=>375, 376=>376, 377=>377, 378=>378, 379=>379, 380=>380, 381=>381, 382=>382, 383=>383, 384=>384, 385=>385, 386=>386, 387=>387, 388=>388, 389=>389, 390=>390, 391=>391, 392=>392, 393=>393, 394=>394, 395=>395, 396=>396, 397=>397, 398=>398, 399=>399, 400=>400, 401=>401, 402=>402, 403=>403, 404=>404, 405=>405, 406=>406, 407=>407, 408=>408, 409=>409, 410=>410, 411=>411, 412=>412, 413=>413, 414=>414, 415=>415, 416=>416, 417=>417, 418=>418, 419=>419, 420=>420, 421=>421, 422=>422, 423=>423, 424=>424, 425=>425, 426=>426, 427=>427, 428=>428, 429=>429, 430=>430, 431=>431, 432=>432, 433=>433, 434=>434, 435=>435, 436=>436, 437=>437, 438=>438, 439=>439, 440=>440, 441=>441, 442=>442, 443=>443, 444=>444, 445=>445, 446=>446, 447=>447, 448=>448, 449=>449, 450=>450, 451=>451, 452=>452, 453=>453, 454=>454, 455=>455, 456=>456, 457=>457, 458=>458, 459=>459, 460=>460, 461=>461, 462=>462, 463=>463, 464=>464, 465=>465, 466=>466, 467=>467, 468=>468, 469=>469, 470=>470, 471=>471, 472=>472, 473=>473, 474=>474, 475=>475, 476=>476, 477=>477, 478=>478, 479=>479, 480=>480, 481=>481, 482=>482, 483=>483, 484=>484, 485=>485, 486=>486, 487=>487, 488=>488, 489=>489, 490=>490, 491=>491, 492=>492, 493=>493, 494=>494, 495=>495, 496=>496, 497=>497, 498=>498, 499=>499, 500=>500,} end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.284341286 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.252150505 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.264710151 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.348075808 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.305701603 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.365636793 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.273271881 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.332310845 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.292630057 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 8.335928959 built-ruby 7.172826071 built-ruby 7.045850511 built-ruby 7.061242378 built-ruby 7.083778668 built-ruby 7.231436649 built-ruby 6.99650581 built-ruby 7.048860151 built-ruby 7.100864803 built-ruby 7.044032351 built-ruby 7.03534662 ----------------------------------------------------------- vm2_case i = 0 while i<6_000_000 # while loop 2 case :foo when :bar raise when :baz raise when :boo raise when :foo i += 1 end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.255147799 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.260552685 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.258343899 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.257984835 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.256250294 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.25806769 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.255956113 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.262349225 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.267418919 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.25829243 built-ruby 0.261425531 built-ruby 0.262214874 built-ruby 0.26018095 built-ruby 0.262717702 built-ruby 0.258691312 built-ruby 0.257684272 built-ruby 0.26172564 built-ruby 0.256428464 built-ruby 0.268045575 built-ruby 0.263965092 ----------------------------------------------------------- vm2_defined_method class Object define_method(:m){} end i = 0 while i<6_000_000 # benchmark loop 2 i += 1 m; m; m; m; m; m; m; m; end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.346133413 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.378742621 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.294092417 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.293539556 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.274355537 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.296236901 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.222748246 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.325026043 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.277487138 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 3.239733905 built-ruby 3.365833992 built-ruby 3.306552457 built-ruby 3.258809633 built-ruby 3.346184535 built-ruby 3.321523539 built-ruby 3.516951366 built-ruby 3.429493517 built-ruby 3.535931674 built-ruby 3.46452248 built-ruby 3.617529563 ----------------------------------------------------------- vm2_dstr i = 0 x = y = 'z' while i<6_000_000 # benchmark loop 2 i += 1 str = "foo#{x}bar#{y}baz" end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.622820108 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.627182804 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.639245122 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.642903747 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.620047495 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.623288479 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.64253773 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.620016465 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.623421859 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.632170331 built-ruby 1.628645852 built-ruby 1.626497695 built-ruby 1.669383769 built-ruby 1.654466836 built-ruby 1.627026296 built-ruby 1.681158241 built-ruby 1.634795759 built-ruby 1.620192015 built-ruby 1.670946052 built-ruby 1.685975446 ----------------------------------------------------------- vm2_eval i = 0 while i<6_000_000 # benchmark loop 2 i += 1 eval("1") end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 26.132844639 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 26.143925361 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 26.19911753 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 26.196381066 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 25.979756612 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 26.024400189 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 25.953662829 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 26.266193598 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 24.916444709 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 25.354920757 built-ruby 25.763871534 built-ruby 25.925822681 built-ruby 27.701118126 built-ruby 23.479242197 built-ruby 26.215361125 built-ruby 25.85174953 built-ruby 25.868148274 built-ruby 25.191033699 built-ruby 25.427630383 built-ruby 25.582812451 ----------------------------------------------------------- vm2_method def m nil end i = 0 while i<6_000_000 # benchmark loop 2 i += 1 m; m; m; m; m; m; m; m; end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.755200467 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.96479474 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.750912731 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.794001735 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.732525098 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.820932708 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.694581559 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.698935396 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.698314576 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.678519062 built-ruby 1.689232721 built-ruby 1.700146264 built-ruby 1.693471533 built-ruby 1.736493351 built-ruby 1.692902754 built-ruby 1.746913115 built-ruby 1.778068021 built-ruby 1.674061227 built-ruby 1.683272759 built-ruby 1.706050582 ----------------------------------------------------------- vm2_method_missing class C def method_missing mid end end obj = C.new i = 0 while i<6_000_000 # benchmark loop 2 i += 1 obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.833544595 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.512172777 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.500840884 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.499800936 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.666619706 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.6047719 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.667655903 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.818207196 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.600037884 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.675789193 built-ruby 2.482484906 built-ruby 2.47695018 built-ruby 2.670814487 built-ruby 2.608173949 built-ruby 2.523906454 built-ruby 2.498151646 built-ruby 2.548506303 built-ruby 2.539972472 built-ruby 2.487582362 built-ruby 2.553107476 ----------------------------------------------------------- vm2_method_with_block def m nil end i = 0 while i<6_000_000 # benchmark loop 2 i += 1 m{}; m{}; m{}; m{}; m{}; m{}; m{}; m{}; end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.96944598 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.421223686 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.42554205 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.920743669 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.96166542 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.997511607 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.937473514 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.949984731 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.904813378 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.892233301 built-ruby 1.923994793 built-ruby 1.897314448 built-ruby 1.917947358 built-ruby 1.914521619 built-ruby 2.031760715 built-ruby 1.903948779 built-ruby 1.948445942 built-ruby 1.928913226 built-ruby 1.905217971 built-ruby 1.896064203 ----------------------------------------------------------- vm2_mutex require 'thread' m = Mutex.new i = 0 while i<6_000_000 # benchmark loop 2 i += 1 m.synchronize{} end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.981764276 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.98635764 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.007474928 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.993722514 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.035311452 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.996075691 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.012701776 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.991572743 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.996640765 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.003920649 built-ruby 1.075170264 built-ruby 1.030129652 built-ruby 1.020759461 built-ruby 1.000638399 built-ruby 0.994710507 built-ruby 1.046969772 built-ruby 1.004929571 built-ruby 1.023840665 built-ruby 1.007138048 built-ruby 1.025367443 ----------------------------------------------------------- vm2_poly_method class C1 def m 1 end end class C2 def m 2 end end o1 = C1.new o2 = C2.new i = 0 while i<6_000_000 # 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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.573310115 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.591884844 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.599230651 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.594221284 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.668044649 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.584669615 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.601072048 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.655557574 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.604577597 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.588541566 built-ruby 2.568908091 built-ruby 2.862782322 built-ruby 2.565131151 built-ruby 2.721578793 built-ruby 2.605200483 built-ruby 2.602106094 built-ruby 2.664140175 built-ruby 2.587541393 built-ruby 2.687506607 built-ruby 2.675693009 ----------------------------------------------------------- vm2_poly_method_ov class C1 def m 1 end end class C2 def m 2 end end o1 = C1.new o2 = C2.new i = 0 while i<6_000_000 # 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 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.290865803 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.290770351 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.29146641 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.290210636 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.291928292 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.290759217 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.291587822 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.291413938 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.291235217 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.291982903 built-ruby 0.293951582 built-ruby 0.313188633 built-ruby 0.310437399 built-ruby 0.291978279 built-ruby 0.290977546 built-ruby 0.291148758 built-ruby 0.292048399 built-ruby 0.31117159 built-ruby 0.29290938 built-ruby 0.291216286 ----------------------------------------------------------- vm2_proc def m &b b end pr = m{ a = 1 } i = 0 while i<6_000_000 # benchmark loop 2 i += 1 pr.call end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.630344528 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.715082993 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.680454719 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.637776689 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.630168098 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.642953976 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.647044971 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.672958924 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.648922469 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.629860828 built-ruby 0.675379573 built-ruby 0.756342483 built-ruby 0.649631913 built-ruby 0.637561297 built-ruby 0.633175326 built-ruby 0.6380674 built-ruby 0.638074257 built-ruby 0.682601752 built-ruby 0.633588825 built-ruby 0.675508228 ----------------------------------------------------------- vm2_raise1 def rec n if n > 0 rec n-1 else raise end end i = 0 while i<6_000_000 # benchmark loop 2 i += 1 begin rec 1 rescue # ignore end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 10.147565689 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.479349502 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.641583502 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.687156057 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.848562815 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.863190598 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.641514203 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.883714915 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.495703096 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 9.321690757 built-ruby 10.651201604 built-ruby 9.682256035 built-ruby 9.469614021 built-ruby 9.672527961 built-ruby 9.911840462 built-ruby 9.870273943 built-ruby 9.779642987 built-ruby 9.987943384 built-ruby 9.532011 built-ruby 9.331195529 ----------------------------------------------------------- vm2_raise2 def rec n if n > 0 rec n-1 else raise end end i = 0 while i<6_000_000 # benchmark loop 2 i += 1 begin rec 10 rescue # ignore end end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.757381872 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.885540203 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.416778475 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.252497704 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.590162098 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.212483382 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 13.152894555 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.854956578 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.859747905 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 12.905773567 built-ruby 12.991162582 built-ruby 12.851898433 built-ruby 12.741654786 built-ruby 13.148480857 built-ruby 13.445075748 built-ruby 12.858940395 built-ruby 13.013640525 built-ruby 13.083824902 built-ruby 13.152170724 built-ruby 12.619837753 ----------------------------------------------------------- vm2_regexp i = 0 str = 'xxxhogexxx' while i<6_000_000 # benchmark loop 2 /hoge/ =~ str i += 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.405883724 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.42332616 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.450741806 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.38641014 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.396019718 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.425551837 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.412616223 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.416183823 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.44206297 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 1.392636916 built-ruby 1.337369514 built-ruby 1.338488072 built-ruby 1.336167505 built-ruby 1.335478004 built-ruby 1.345565232 built-ruby 1.342820261 built-ruby 1.374788052 built-ruby 1.338676918 built-ruby 1.362613979 built-ruby 1.377501894 ----------------------------------------------------------- vm2_send class C def m end end o = C.new i = 0 while i<6_000_000 # benchmark loop 2 i += 1 o.__send__ :m end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.490438361 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.520504107 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.478320421 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.477293631 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.469486519 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.470715872 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.474099313 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.473366034 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.472993034 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.470841931 built-ruby 0.474157841 built-ruby 0.475378306 built-ruby 0.470716653 built-ruby 0.472501539 built-ruby 0.462898672 built-ruby 0.473916813 built-ruby 0.491714741 built-ruby 0.470093001 built-ruby 0.469272875 built-ruby 0.471475659 ----------------------------------------------------------- vm2_super class C def m 1 end end class CC < C def m super() end end obj = CC.new i = 0 while i<6_000_000 # benchmark loop 2 obj.m i += 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.696510879 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.637647484 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.63791795 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.798262561 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.643767428 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.7143231 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.654385362 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.680023281 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.638299721 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.643989099 built-ruby 0.643277885 built-ruby 0.702340625 built-ruby 0.676130975 built-ruby 0.706254506 built-ruby 0.668713876 built-ruby 0.640024563 built-ruby 0.645120213 built-ruby 0.7076468 built-ruby 0.685115409 built-ruby 0.664026469 ----------------------------------------------------------- vm2_unif1 i = 0 def m a, b end while i<6_000_000 # benchmark loop 2 i += 1 m 100, 200 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.342349423 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.337527371 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.339828991 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.38419099 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.338047115 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.337408931 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.340883625 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.339692539 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.348185743 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.343260409 built-ruby 0.338504098 built-ruby 0.344024164 built-ruby 0.340317831 built-ruby 0.3477341 built-ruby 0.338128814 built-ruby 0.33836994 built-ruby 0.340814481 built-ruby 0.3390527 built-ruby 0.416568611 built-ruby 0.338792568 ----------------------------------------------------------- vm2_zsuper i = 0 class C def m a 1 end end class CC < C def m a super end end obj = CC.new while i<6_000_000 # benchmark loop 2 obj.m 10 i += 1 end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.690054682 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.749674938 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.892319431 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.759309126 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.761316567 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.719023069 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.730092784 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.68093971 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.751928335 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.685182412 built-ruby 0.663868442 built-ruby 0.653877314 built-ruby 0.735214491 built-ruby 0.653619631 built-ruby 0.72341409 built-ruby 0.659342373 built-ruby 0.654166567 built-ruby 0.670953022 built-ruby 0.718910336 built-ruby 0.695897259 ----------------------------------------------------------- vm3_backtrace # get last backtrace begin caller(0, 0) rescue ArgumentError alias caller_orig caller def caller lev, n caller_orig(lev)[0..n] end end def rec n if n < 0 100_000.times{ caller(0, 1) } else rec(n-1) end end rec 50 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.163666573 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.163637827 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.162567817 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.163006655 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.163628909 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.164373862 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.164514847 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.163944968 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.161767886 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.162455535 built-ruby 0.159418702 built-ruby 0.160932823 built-ruby 0.159003137 built-ruby 0.161690923 built-ruby 0.16173915 built-ruby 0.160979335 built-ruby 0.161826363 built-ruby 0.160026678 built-ruby 0.160973151 built-ruby 0.158913026 ----------------------------------------------------------- vm3_clearmethodcache i = 0 while i<200_000 i += 1 Class.new{ def m; end } end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.574428677 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.577888504 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.577249772 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.581855033 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.577149937 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.58761023 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.574530107 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.575299076 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.570352963 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.582242533 built-ruby 0.583379275 built-ruby 0.581074035 built-ruby 0.563170976 built-ruby 0.578314259 built-ruby 0.598524835 built-ruby 0.584221681 built-ruby 0.577570748 built-ruby 0.578514864 built-ruby 0.594644709 built-ruby 0.591821993 ----------------------------------------------------------- vm3_gc #! /usr/bin/ruby 5000.times do 100.times do {"xxxx"=>"yyyy"} end GC.start end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.907282282 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.91089758 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.913005885 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.909398391 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.919283496 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.91651891 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.906205631 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.919161793 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.919534072 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.920642437 built-ruby 0.920133405 built-ruby 0.917772627 built-ruby 0.913613302 built-ruby 0.918626163 built-ruby 0.926357009 built-ruby 0.912886932 built-ruby 0.908544994 built-ruby 0.913337095 built-ruby 0.910945118 built-ruby 0.917921905 ----------------------------------------------------------- vm_thread_alive_check1 5_000.times{ t = Thread.new{} while t.alive? Thread.pass end } ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.126859761 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.130241004 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.157968818 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.133777214 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134914735 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.131561189 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.141100535 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.134135154 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.135307516 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 0.140015072 built-ruby 0.123924095 built-ruby 0.128030796 built-ruby 0.135072184 built-ruby 0.12059235 built-ruby 0.123024871 built-ruby 0.128437124 built-ruby 0.133166177 built-ruby 0.125585424 built-ruby 0.124868254 built-ruby 0.130745292 ----------------------------------------------------------- vm_thread_create_join i = 0 while i<100_000 # benchmark loop 3 i += 1 Thread.new{ }.join end ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.157235958 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.087132338 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.105998232 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.177534994 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.097756249 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.101668803 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.000850609 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.202064387 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.134560902 ruby 2.2.0dev (2014-03-03 trunk 45261) [x86_64-linux] 2.120171736 built-ruby 1.936056494 built-ruby 2.102584771 built-ruby 2.023470103 built-ruby 2.101359715 built-ruby 2.021609548 built-ruby 2.14184126 built-ruby 2.175755252 built-ruby 2.207085929 built-ruby 1.928412988 built-ruby 2.140477411 ----------------------------------------------------------- vm_thread_mutex1 # one thread, one mutex (no contention) require 'thread' m = Mutex.new r = 0 max = 2000 lmax = max * max (1..1).map{ Thread.new{ i = 0 while i