Encourage `Hash#compare_by_identity`
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
- Type d'issue
- Fonctionnalité
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- ruby
- Domaine
- performance
Piste de recherche
L’issue ne nomme aucun fichier du dépôt ni aucun test. Commencez par reproduire le benchmark Ruby fourni pour les recherches ordinaires dans Hash et les recherches dans Hash avec comparaison d’identité, puis examinez les conventions de benchmark existantes du projet. Le travail sera considéré comme terminé lorsqu’une cible d’optimisation clairement délimitée et des éléments issus du benchmark montrant l’amélioration visée seront disponibles.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
If one is using keys that can be compared by identity, and if those keys are not already optimized (symbols are optimized, not sure what else is), using compare_by_identity can yield a 4x speedup.
require 'benchmark/ips'
KEY = Class.new
CACHE = {KEY => :foo}
CACHE_BY_ID = {KEY => :foo}.compare_by_identity
def fast
CACHE_BY_ID[KEY]
end
def slow
CACHE[KEY]
end
Benchmark.ips do |x|
x.report('lookup with compare_by_identity') { fast }
x.report('lookup') { slow }
x.compare!
end
lookup with compare_by_identity
10.781M (± 3.3%) i/s - 54.709M in 5.081038s
lookup 2.571M (± 3.2%) i/s - 13.089M in 5.097409s
Comparison:
lookup with compare_by_identity: 10781059.3 i/s
lookup: 2570641.2 i/s - 4.19x (± 0.00) slower
Same result if lookup is not successful (as long as the hash is not empty...)
I hope we can optimize this a bit.
- Langage dominant
- Ruby
- Étoiles
- 5.7k
- Forks
- 370
- Merge moyen
- 4 h 42 min
- PR mergées (30 j)
- 13
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de fastruby/fast-ruby
-
Difficulté 2/5 1-3 heures Accessibilité débutants 52/100
fastruby/fast-ruby#230 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
fastruby/fast-ruby#220 · 6 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 42/100
fastruby/fast-ruby#208 · 7 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
[FEATURE REQUEST] Use the project's WIKI to share results for each Ruby version with latest CI resultsPeut-être pris @JuanVqz l’a pris il y a 6 jours. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
fastruby/fast-ruby#206 · 4 commentaires · 1 réaction · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de fastruby/fast-ruby
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
rubys/roundhouse#444 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
sclorg/s2i-ruby-container#656 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
yegor256/rubocop-elegant#92 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
ecosyste-ms/awesome#812 ·
Les mainteneurs répondent en général sous 2 jours