From: "tmm1 (Aman Gupta)" Date: 2013-12-07T11:57:06+09:00 Subject: [ruby-core:58931] [ruby-trunk - misc #9188] r43870 make benchmark/bm_so_k_nucleotide.rb slow Issue #9188 has been updated by tmm1 (Aman Gupta). There were some minor improvements to rb_fstring() recently, but the hash changes are still slow on trunk. In my environment: # trunk ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.72s user 0.03s system 99% cpu 3.757 total ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.76s user 0.03s system 99% cpu 3.794 total ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.70s user 0.03s system 99% cpu 3.736 total ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.78s user 0.03s system 99% cpu 3.817 total # revert r43870 ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.50s user 0.02s system 99% cpu 3.528 total ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.49s user 0.02s system 99% cpu 3.515 total ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.54s user 0.02s system 99% cpu 3.570 total ./miniruby -I. benchmark/bm_so_k_nucleotide.rb > /dev/null 3.52s user 0.02s system 99% cpu 3.546 total I'm trying to come up with an alternative patch to keep the string literal hash key test passing, but I'm having a hard time with the parser. The best I can come up with is the following, which works but feels wrong: @@ -535,7 +535,7 @@ newhash for (i = num; i > 0; i -= 2) { const VALUE v = TOPN(i - 2); const VALUE k = TOPN(i - 1); - rb_hash_aset(val, k, v); + rb_hash_aset(val, RB_TYPE_P(k, T_STRING) ? rb_fstring(k) : k, v); } POPN(num); } Ideally, I'd like to replace alternate putstring instructions involved in any newhash instruction with putobject instructions. Could someone point out the best place in the compiler to do this? ---------------------------------------- misc #9188: r43870 make benchmark/bm_so_k_nucleotide.rb slow https://bugs.ruby-lang.org/issues/9188#change-43481 Author: authorNari (Narihiro Nakamura) Status: Open Priority: Normal Assignee: tmm1 (Aman Gupta) Category: core Target version: current: 2.1.0 Hi. I think r43870 make benchmark/bm_so_k_nucleotide.rb slow. r43870 % time ./miniruby ./benchmark/bm_so_k_nucleotide.rb ./miniruby ./benchmark/bm_so_k_nucleotide.rb 1.70s user 0.01s system 99% cpu 1.718 total r43869 % time ./miniruby ./benchmark/bm_so_k_nucleotide.rb ./miniruby ./benchmark/bm_so_k_nucleotide.rb 1.52s user 0.03s system 99% cpu 1.559 total -- http://bugs.ruby-lang.org/