diff options
author | Marc-Andre Lafortune <github@marc-andre.ca> | 2020-12-22 21:29:00 -0500 |
---|---|---|
committer | Marc-André Lafortune <github@marc-andre.ca> | 2020-12-23 01:08:38 -0500 |
commit | daec109f423e54094800e083fc8a8ca5cbceb866 (patch) | |
tree | f78b987b23611916bd7dba30483e51a56fd5f864 /ext/psych | |
parent | c5a445d577b786e31c420b5857ad05b954b420ec (diff) |
[ruby/psych] Optimize cache with `compare_by_identity`
Using `compare_by_identity` gives a 4x performance boost on cache hits.
Benchmark in https://github.com/JuanitoFatas/fast-ruby/issues/189
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3953
Diffstat (limited to 'ext/psych')
-rw-r--r-- | ext/psych/lib/psych/visitors/visitor.rb | 2 | ||||
-rw-r--r-- | ext/psych/lib/psych/visitors/yaml_tree.rb | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/ext/psych/lib/psych/visitors/visitor.rb b/ext/psych/lib/psych/visitors/visitor.rb index 35f8f81f18..e2585c0c77 100644 --- a/ext/psych/lib/psych/visitors/visitor.rb +++ b/ext/psych/lib/psych/visitors/visitor.rb @@ -12,7 +12,7 @@ module Psych def self.dispatch_cache Hash.new do |hash, klass| hash[klass] = :"visit_#{klass.name.gsub('::', '_')}" - end + end.compare_by_identity end if defined?(Ractor) diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index 986c57be70..ac6777aeb5 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -80,7 +80,7 @@ module Psych raise(TypeError, "Can't dump #{target.class}") unless method h[klass] = method - end + end.compare_by_identity end def start encoding = Nodes::Stream::UTF8 |