Issue #19236 has been updated by byroot (Jean Boussier).
Status changed from Closed to Open
Target version deleted (3.3)
Reopening as the merged commit is the Ruby 3.3 part.
I'll implement the 3.4 next year.
----------------------------------------
Feature #19236: Allow to create hashes with a specific capacity from Ruby
https://bugs.ruby-lang.org/issues/19236#change-103242
* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
Followup on [Feature #18683] which added a C-API for this purpose.
Various protocol parsers such as Redis `RESP3` or `msgpack`, have to create hashes, and
they know the size in advance.
For efficiency, it would be preferable if they could directly allocate a Hash of the
necessary size, so that large hashes wouldn't cause many re-alloccations and re-hash.
`String` and `Array` both already offer similar APIs:
```ruby
String.new(capacity: XXX)
Array.new(XX) / rb_ary_new_capa(long)
```
However there's no such public API for Hashes in Ruby land.
### Proposal
I think `Hash` should have a way to create a new hash with a `capacity` parameter.
The logical signature of `Hash.new(capacity: 1000)` was deemed too incompatible in
[Feature #18683].
@Eregon proposed to add `Hash.create(capacity: 1000)`.
--
https://bugs.ruby-lang.org/