Speed up Hash#dup by patching Hash#initialize_copy
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:
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.