Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Encourage `Hash#compare_by_identity`

Ouverte
#189 2 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

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

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de fastruby/fast-ruby

Toutes les issues de fastruby/fast-ruby

Issues similaires

Plus d'issues Ruby

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.