Símbolos Ruby: chaves
O curso mede a diferença de velocidade entre símbolos e strings em Ruby e explica de onde ela vem. Com o módulo padrão Benchmark, ele mede a igualdade entre símbolos e entre strings e depois a busca em hashes com chaves de cada tipo. Uma classe que registra chamadas mostra como o Hash usa #hash e #eql? para achar uma chave. Depois o curso mostra que a maior parte da diferença vem de literais de string alocando objetos novos, apresenta Hash#compare_by_identity e monta contagens com chaves símbolo e Hash.new(0).
O que você vai aprender
- ✓Medir tempo de código com Benchmark.bm e ler as colunas user, system, total e real
- ✓Comparar a velocidade de símbolos e strings na igualdade e na busca em hash
- ✓Como o Hash usa #hash para escolher um bucket e #eql? para confirmar a chave
- ✓Por que a alocação de literais de string explica a maior parte da diferença e o efeito dos literais congelados
- ✓Usar Hash#compare_by_identity para comparar chaves pela identidade do objeto
- ✓Contar ocorrências num hash com chaves símbolo usando Hash.new(0)
Isso não é mais folclore
O curso do nível intern Símbolos vs strings já fez um trabalho de verdade aqui. A aula "Eficiência de memória e velocidade de comparação" explicou que símbolos são internados. :admin escrito em qualquer ponto de um programa é sempre o mesmo objeto, enquanto "admin" escrito duas vezes normalmente…
Ler a aula completa grátis →Currículo
7 aulasIsso não é mais folclore
Retoma por que símbolos são internados e apresenta o plano de medir sua velocidade com Benchmark.
Medindo igualdade: symbol vs string
Usa Benchmark.bm para mostrar a igualdade de strings cerca de três vezes mais lenta, em parte por alocar strings novas.
Medindo busca em hash: onde isso importa
Mede leituras em hash, em que chaves símbolo foram cerca de duas vezes mais rápidas que chaves string.
Como o Hash encontra sua chave
Uma classe que registra chamadas mostra o Hash usando #hash e depois #eql?, e literais congelados quase eliminam a diferença.
Hash#compare_by_identity: forçando comparação de identidade
Mostra como Hash#compare_by_identity faz duas strings de mesmo conteúdo contarem como duas chaves distintas.
Contando e agrupando com chaves symbol
Monta num loop um hash de contagens com chaves símbolo e depois o encurta com Hash.new(0).
Juntando tudo: da afirmação pra prova
Revisa as medições e o mecanismo de #hash e #eql? e propõe escrever um método de contagem.