O jogo de benchmarks da linguagem do computador - The Computer Language Benchmarks Game
O Computer Language Benchmarks Game (anteriormente chamado de The Great Computer Language Shootout ) é um projeto de software livre para comparar como um dado subconjunto de algoritmos simples pode ser implementado em várias linguagens de programação populares .
O projeto consiste em:
- Um conjunto de problemas algorítmicos muito simples
- Várias implementações para os problemas acima em várias linguagens de programação
- Um conjunto de testes de unidade para verificar se as implementações enviadas resolvem a declaração do problema
- Uma estrutura para executar e cronometrar as implementações
- Um site para facilitar a comparação interativa dos resultados
Idiomas suportados
Devido a restrições de recursos, apenas um pequeno subconjunto de linguagens de programação comuns é suportado, a critério do operador do jogo.
- Ada
- C
- Capela
- C #
- C ++
- Dardo
- Erlang
- F #
- Fortran
- Ir
- Haskell
- Java
- JavaScript
- Julia
- Lisp
- Lua
- OCaml
- Pascal
- Perl
- PHP
- Pitão
- Raquete
- Rubi
- Ferrugem
- Conversa fiada
- Rápido
Métricas
Os seguintes aspectos de cada implementação são medidos:
- tempo de execução geral do usuário
- pico de alocação de memória
- tamanho do gzip 'ped do código-fonte da solução
- soma do tempo total de CPU em todos os threads
- utilização individual da CPU
É comum ver várias soluções na mesma linguagem de programação para o mesmo problema. Isso destaca que, dentro das restrições de uma dada linguagem, uma solução pode ser fornecida que seja de alta abstração, seja eficiente em termos de memória, seja rápida ou possa ser melhor paralelizada.
Programas de referência
Foi uma escolha de design desde o início incluir apenas problemas de brinquedos muito simples, cada um fornecendo um tipo diferente de desafio de programação. Isso fornece aos usuários do Benchmark Game a oportunidade de examinar as várias implementações.
- árvores binárias
- chameneos-redux
- Fannkuch-Redux
- fasta
- nucleotídeo k
- Mandelbrot
- concurso de meteoros
- n-corpo
- pidigits
- regex-redux
- complemento reverso
- norma espectral
- anel de rosca
História
O projeto ficou conhecido como The Great Computer Language Shootout até 2007.
Uma porta para Windows foi mantida separadamente entre 2002 e 2003.
As fontes foram arquivadas no GitLab.
Também existem forks mais antigos no GitHub.
O projeto está em constante evolução. A lista de linguagens de programação suportadas é atualizada aproximadamente uma vez por ano, seguindo as tendências do mercado. Os usuários também podem enviar soluções aprimoradas para qualquer um dos problemas ou sugerir o refinamento da metodologia de teste.
Ressalvas
Os próprios desenvolvedores destacam o fato de que aqueles que fazem pesquisas devem ter cuidado ao usar esses microbenchmarks:
[...] os benchmarks de JavaScript são fugazmente pequenos e se comportam de maneiras significativamente diferentes dos aplicativos reais. Documentamos inúmeras diferenças de comportamento e concluímos, a partir dessas diferenças medidas, que os resultados com base nos benchmarks podem enganar os implementadores de mecanismo JavaScript. Além disso, observamos comportamentos interessantes em aplicativos JavaScript reais que os benchmarks não conseguem exibir, sugerindo que estratégias de otimização anteriormente inexploradas podem ser produtivas na prática.
Impacto
Os resultados do benchmark revelaram vários problemas do compilador. Às vezes, um determinado compilador falha em processar construções incomuns, mas de outra forma, construções gramaticalmente válidas. Em outras ocasiões, o desempenho do tempo de execução ficou abaixo das expectativas, o que levou os desenvolvedores de compiladores a revisar seus recursos de otimização.
Vários artigos de pesquisa foram baseados em benchmarks, seus resultados e sua metodologia.