Hi, 

I've added bmbm to Benchmark module. 

From benchmark.html:

    bmbm

----------
     bmbm([label_width]) do |x|
       x.item("label1") { .... }
       ....
     end
----------

   bmbm is yet another benchmark. This utility function is provited to
   prevent a kind of job order dependency, which is caused by memory
   allocation and object creation. The usage is similar to bm but has
   less options and does extra three things:
    1. Rehearsal: runs all items in the job list to allocate enough
       memory.
    2. GC: before each measurement, invokes GC.start to prevent the
       influence of previous job.
    3. If given label_width is less than the maximal width of labels
       given as item's argument, the latter is used. Because bmbm is a
       2-pass procedure, this is possible.

Thanks, 

-- Gotoken