fastruby / fastruby/fast-ruby

`dup`ing an Identity Hash/Set is faster than creating a new one

Open
#230 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.