Bug #7166
closedSpeed up Hash#dup by patching Hash#initialize_copy
Description
Hash#dup can be sped up. Hash#initialize_copy will iterate over each pair in the hash, inserting in to the new hash. I think we can speed up hash duping by using st_copy and copying the underlying hash table.
Here is the benchmark I've been using:
https://gist.github.com/3893852
When you pass a hash to Hash.[], it just uses st_copy to copy the hash. If you run the benchmark, you'll see a fairly large difference between the performance of using Hash#dup and copying the hash via Hash.[].
I've attached a patch that changes Hash#initialize_copy to use st_copy. Here is a plot of the performance difference:
The blue line is the old Hash#dup, the green line is Hash#dup after my patch is applied, and the red line is copying via Hash.[].
I'm not 100% confident in this patch, so I hope someone can review more closely before applying (or rejecting!). Thanks.
Files