Issue #9590 has been updated by Masaya Tarui. I found that this patch lacks the measure to callcc. Please wait for a while. ---------------------------------------- Feature #9590: introduce st_foreach_update and st_foreach_update_check for performance. https://bugs.ruby-lang.org/issues/9590#change-45640 * Author: Masaya Tarui * Status: Open * Priority: Normal * Assignee: Masaya Tarui * Category: core * Target version: current: 2.2.0 ---------------------------------------- Hello, I think I'll introduce st_foreach_update and st_foreach_update_check for performance. For example, it is effective at Hash's rehash,dup and clone. (included in patch) Are there any problem? Patch is at https://gist.github.com/tarui/9345180 and attached here. Some benchmarks are shown below. <pre> $cat test.rb require 'benchmark' N=10**6 a={} Benchmark.bm(8) do |x| x.report("create") { N.times{|i| a[i] = i} } x.report("rehash") { a.rehash } x.report("dup") { a.dup } x.report("clone") { a.clone } end $ original_ruby test.rb user system total real create 0.730000 0.050000 0.780000 ( 0.788674) rehash 1.030000 0.080000 1.110000 ( 1.113006) dup 1.120000 0.050000 1.170000 ( 1.175618) clone 1.300000 0.010000 1.310000 ( 1.312528) $ proposed_ruby test.rb user system total real create 0.710000 0.050000 0.760000 ( 0.758993) rehash 0.020000 0.000000 0.020000 ( 0.018409) dup 0.130000 0.050000 0.180000 ( 0.182608) clone 0.500000 0.000000 0.500000 ( 0.509430) $ make gcbench-rdoc | tail -n8|head -n2 original_ruby: user system total real 159.630000 2.870000 162.500000 (163.414495) proposed_ruby: user system total real 152.920000 2.730000 155.650000 (156.040741) </pre> ---Files-------------------------------- 0001-introduce-st_foreach_update-st_foreach_update_check.patch (7.58 KB) -- http://bugs.ruby-lang.org/