fastruby / fastruby/fast-ruby

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

Offen
#230 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Ruby
Sterne
5.7k
Forks
371
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.