1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

benchmark/bm_hash_aref_sym*.rb: force static symbols

Dynamic symbols hash more slowly because they need extra method
dispatch in rb_any_hash.  I am not sure if dynamic symbols are
a realistic use case as hash keys, so this commit only
restores performance when comparing against versions of Ruby
which lack dsyms.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2014-10-09 03:44:12 +00:00
parent 3cb3966838
commit 098b0ba572
3 changed files with 16 additions and 2 deletions

View file

@ -1,3 +1,7 @@
Thu Oct 9 12:40:28 2014 Eric Wong <e@80x24.org>
* benchmark/bm_hash_aref_sym*.rb: force static symbols
Thu Oct 9 12:38:28 2014 Eric Wong <e@80x24.org>
* hash.c (rb_any_hash): remove unnecessary dsym check

View file

@ -1,4 +1,9 @@
h = {}
syms = ('a'..'z').to_a.map(&:to_sym)
syms = ('a'..'z').to_a
begin
syms = eval("%i[#{syms.join(' ')}]")
rescue SyntaxError # <= 1.9.3
syms.map!(&:to_sym)
end
syms.each { |s| h[s] = s }
200_000.times { syms.each { |s| h[s] } }

View file

@ -3,6 +3,11 @@ syms = %w[puts warn syswrite write stat bacon lettuce tomato
some symbols in this array may already be interned others should not be
hash browns make good breakfast but not cooked using prime numbers
shift for division entries delete_if keys exist?
].map!(&:to_sym)
]
begin
syms = eval("%i[#{syms.join(' ')}]")
rescue SyntaxError # <= 1.9.3
syms.map!(&:to_sym)
end
syms.each { |s| h[s] = s }
200_000.times { syms.each { |s| h[s] } }