Actions
Feature #17758
openProvide Hash#count for performance improvement
Status:
Open
Assignee:
-
Target version:
-
Description
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.
$ /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?
Actions
Like0
Like0