Isso não é mais folclore

Prévia grátis 3 min de leitura

O que duas aulas anteriores estabeleceram

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 cria dois objetos String separados. A checagem de igualdade de um símbolo pode se apoiar nesse objeto compartilhado, mais perto de "são o mesmo objeto?" do que de "têm os mesmos caracteres?". A aula "Quando usar symbols: chaves de hash e identificadores" transformou isso numa regra. Dado (algo lido, guardado ou editado) pende para String. Rótulo (um identificador fixo, conhecido de antemão, contra o qual o programa checa) pende para Symbol, e chaves de hash são o caso mais comum de rótulo.

Nenhuma das duas aulas mediu nada. Um dos pontos-chave daquele curso chamou as diferenças de "reais e mecânicas, não folclore", com mais peso em escala. Este curso põe números nessa afirmação. E os números acabam sendo mais interessantes do que "símbolos são mais rápidos".

Da afirmação à evidência

"Símbolos são mais rápidos" é fácil de repetir e fácil de errar, exagerado para um lado e descartado para o outro. A biblioteca padrão do Ruby tem uma ferramenta para checar: Benchmark, sem gem, feita para medir o tempo de código e comparar resultados. As duas próximas aulas a usam em operações com símbolos e strings rodando no Ruby 4.0.1 desta app, em vez de números copiados de outro lugar.

O que vem depois dos números

Uma diferença de velocidade medida responde "quanto", não "por quê". Depois que as duas próximas aulas tiverem os números, a aula 4 abre o mecanismo que o Hash usa para achar uma chave: #hash e #eql?, métodos que todo objeto Ruby já tem. É ali que mora a explicação, junto com uma surpresa sobre o que os benchmarks estavam medindo.

Pontos-chave

  • Símbolos vs strings já mostrou por que símbolos são internados e quando escolher um em vez de uma string como chave de hash; nada disso se repete aqui.
  • Um dos pontos-chave daquele curso chamou a diferença de desempenho de real, e não folclore; este curso a mede.
  • O módulo padrão Benchmark do Ruby mede o tempo de código rodando, sem gem, e as duas próximas aulas o usam.
  • O plano: medir a igualdade, medir a busca em hash e depois abrir o mecanismo #hash/#eql? por trás dos dois números.
Aula 1 de 7 · grátis

Continue com a aula 2

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.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...