benchmark


			
require 'benchmark'

total = (ENV['TOTAL'] || 1_000).to_i

Benchmark.bmbm do |x|
  x.report("loop") do
    times = 0
    while times < total
      Dir['']
      times += 1
    end
  end

  x.report("Dir[]") do
    times = 0
    while times < total
      Dir["spec/**/*_spec.rb"]
      times += 1
    end
  end
end

MRI


			
euler:rubinius brian$ TOTAL=10 ruby glob.rb 
Rehearsal -----------------------------------------
loop    0.000000   0.000000   0.000000 (  0.000029)
Dir[]   0.100000   0.300000   0.400000 (  0.412668)
-------------------------------- total: 0.400000sec

            user     system      total        real
loop    0.000000   0.000000   0.000000 (  0.000017)
Dir[]   0.100000   0.310000   0.410000 (  0.431814)

before stat and Float fixes


			
euler:rubinius brian$ TOTAL=10 shotgun/rubinius glob.rb 
Rehearsal -----------------------------------------
loop    0.000821   0.000000   0.000821 (  0.000830)
Dir[]  95.112058   0.000000  95.112058 ( 95.112051)
------------------------------- total: 95.112879sec

            user     system      total        real
loop    0.004152   0.000000   0.004152 (  0.004164)
Dir[]  95.648290   0.000000  95.648290 ( 95.648307)

after fixes


			
euler:rubinius brian$ TOTAL=10 shotgun/rubinius glob.rb 
Rehearsal -----------------------------------------
loop    0.000603   0.000000   0.000603 (  0.000618)
Dir[]  44.284485   0.000000  44.284485 ( 44.284487)
------------------------------- total: 44.285088sec

            user     system      total        real
loop    0.000650   0.000000   0.000650 (  0.000671)
Dir[]  44.153387   0.000000  44.153387 ( 44.153395)

after rewrite of File.fnmatch to not use Regexp


			
Rehearsal -----------------------------------------
loop    0.000563   0.000000   0.000563 (  0.000565)
Dir[]   7.343731   0.000000   7.343731 (  7.343732)
-------------------------------- total: 7.344294sec

            user     system      total        real
loop    0.000589   0.000000   0.000589 (  0.000615)
Dir[]   7.313950   0.000000   7.313950 (  7.313972)