`dup`ing an Identity Hash/Set is faster than creating a new one
- Dominant language
- Ruby
- Stars
- 5.7k
- Forks
- 371
- PR merge metrics
- No merged PRs in 30d
Description
It's one less allocation, too :)
| | YJIT off | YJIT on |
|------------------------------:|-----------:|-----------:|
| `Set.new.compare_by_identity` | 2.571M | 4.260M |
| `S.dup` | **3.014M** | **4.999M** |
| ∆ | **1.17x** | **1.17x** |
| | YJIT off | YJIT on |
|-------------------------------:|-----------:|-----------:|
| `Hash.new.compare_by_identity` | 5.643M | 8.208M |
| `H.dup` | **5.988M** | **9.014M** |
| ∆ | **1.06x** | **1.09x** |
```rb
S = Set.new.compare_by_identity.freeze
H = Hash.new.compare_by_identity.freeze
Benchmark.ips do |x|
x.config(time: 10)
x.report(".new.compare_by_identity") do |times|
i = 0
while (i += 1) <= times
S.dup
end
end
x.report(".dup ") do |times|
i = 0
while (i += 1) <= times
Set.new.compare_by_identity
end
end
x.compare!
end
Benchmark.ips do |x|
x.config(time: 10)
x.report(".new.compare_by_identity") do |times|
i = 0
while (i += 1) <= times
H.dup
end
end
x.report(".dup ") do |times|
i = 0
while (i += 1) <= times
Hash.new.compare_by_identity
end
end
x.compare!
end
```
Contributor guide
Assessment
This issue has not been assessed yet.