From: kachick1@... Date: 2021-03-28T18:21:25+00:00 Subject: [ruby-core:103076] [Ruby master Feature#17758] Provide Hash#count for performance improvement Issue #17758 has been reported by kachick (Kenichi Kamiya). ---------------------------------------- Feature #17758: Provide Hash#count for performance improvement https://bugs.ruby-lang.org/issues/17758 * Author: kachick (Kenichi Kamiya) * Status: Open * Priority: Normal ---------------------------------------- GH-PR: https://github.com/ruby/ruby/pull/4333 In my experience, many developers choice `size`, `length` and `count` as a matter of taste. And Ruby already provide `Array#count` for performance improvement reason since https://github.com/ruby/ruby/commit/921fb6ae2593d07d35df0f1f487b9d64a0db9520 So how about to provide simple bridge implementation into Hash? I have checked the result with `benchmark-driver`, it looks made faster for no arguments pattern, and does not make much slower other arguments pattern. It is compared with recently code https://github.com/ruby/ruby/tree/989e22f394c48aae301a0239cad14871dfa96d43. ```console $ /Users/kachick/.rubies/ruby-3.1.0dev-989e22f394/bin/ruby -v ruby 3.1.0dev (2021-03-28T14:42:38Z master 989e22f394) [x86_64-darwin20] $ ./ruby -v ruby 3.1.0dev (2021-03-28T17:45:56Z hash-count 94b052d7fa) [x86_64-darwin20] $ benchmark-driver benchmark/hash_count.yml -e /Users/kachick/.rubies/ruby-3.1.0dev-989e22f394/bin/ruby -e ./ruby Warming up -------------------------------------- count 94.814 i/s - 100.000 times in 1.054702s (10.55ms/i) count_with_arg 17.106 i/s - 18.000 times in 1.052250s (58.46ms/i) count_with_block 54.992 i/s - 60.000 times in 1.091072s (18.18ms/i) Calculating ------------------------------------- /Users/kachick/.rubies/ruby-3.1.0dev-989e22f394/bin/ruby ./ruby count 92.080 40.571M i/s - 284.000 times in 3.084282s 0.000007s count_with_arg 20.483 20.571 i/s - 51.000 times in 2.489822s 2.479206s count_with_block 56.792 54.271 i/s - 164.000 times in 2.887742s 3.021896s Comparison: count ./ruby: 40571119.6 i/s /Users/kachick/.rubies/ruby-3.1.0dev-989e22f394/bin/ruby: 92.1 i/s - 440608.36x slower count_with_arg ./ruby: 20.6 i/s /Users/kachick/.rubies/ruby-3.1.0dev-989e22f394/bin/ruby: 20.5 i/s - 1.00x slower count_with_block /Users/kachick/.rubies/ruby-3.1.0dev-989e22f394/bin/ruby: 56.8 i/s ./ruby: 54.3 i/s - 1.05x slower ``` How do you think? -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>