Hi all,
I've attached a patch for Array#insert (array.c). This gets rid of the manual argc counting, and improves performance
when dealing with negative indexes. I handled a -1 index specially, since all it does is append.
Some benchmarks:
# Without patch
djberge@linux:~/programming/ruby> ruby insertbench.rb
user system total real
Array#insert(2) 2.810000 0.010000 2.820000 ( 2.844887)
Array#insert(-1) 1.730000 0.020000 1.750000 ( 1.792738)
Array#insert(-2) 1.600000 0.000000 1.600000 ( 1.632053)
# With patch
djberge@linux:~/programming/ruby> /opt/local/bin/ruby insertbench.rb
user system total real
Array#insert(2) 2.800000 0.010000 2.810000 ( 2.840690)
Array#insert(-1) 0.790000 0.010000 0.800000 ( 0.818543)
Array#insert(-2) 0.950000 0.000000 0.950000 ( 0.969453)
# bench_insert.rb
require "benchmark"
MAX = 30000
Benchmark.bm(30) do |x|
x.report("Array#insert(2)"){
array = [1,2,3,4]
MAX.times{ array.insert(2, "a", "b") }
}
x.report("Array#insert(-1)"){
array = [1,2,3,4]
MAX.times{ array.insert(-1, "a", "b") }
}
x.report("Array#insert(-2)"){
array = [1,2,3,4]
MAX.times{ array.insert(-2, "a", "b") }
}
end |