Rust supera C ++ com resultados de jogos de benchmarks

No início deste mês houve uma pequena vitória. De acordo com os resultados mais recentes da popular referência comparando o desempenho das linguagens de programação, Rust ocupa o segundo lugar, sendo colocado entre C e C ++:

imagem

Para comparar o desempenho, é usada a média geométrica do tempo de execução de 10 programas diferentes. De acordo com resultados recentes, o Rust superou o C ++ em 6 de 10 tarefas .

Abaixo do corte, alguns detalhes e uma opinião sobre as perspectivas futuras.

Como interpretar corretamente os resultados?


Benchmarks Game é um projeto popular no qual as linguagens de programação são comparadas com base em medições de desempenho escritas por uma comunidade de programas que resolvem tarefas atribuídas. Como regra, para cada tarefa, há pelo menos várias implementações bem otimizadas no mesmo idioma. Para resumir os resultados, apenas uma implementação para cada idioma é selecionada e mostra o melhor resultado.

É de se esperar que, para linguagens de programação populares, as melhores soluções propostas estejam próximas do limite de desempenho das próprias linguagens. Nos últimos meses, C, C ++ e Rust mostraram resultados muito semelhantes. Assim, podemos concluir que um programa Rust bem otimizado, em média, não deve ter desempenho inferior aos programas C ou C ++ bem otimizados.

Mas referências não significam nada!


Sim e não

Obviamente, a diferença no desempenho de diferentes implementações para sua tarefa específica dependerá de muitos fatores e certamente variará significativamente de tarefa para tarefa.

Por exemplo, Rust mostra os piores resultados comparativos em tarefas cujas soluções exigem o uso de expressões regulares. A partir desses resultados, podemos concluir que a implementação de expressões regulares no Rust (caixa de expressões regulares) é mais lenta que o PCRE2 na solução de problemas. Por outro lado, o Rust é visivelmente superior ao C ++ para tarefas que exigem operações SIMD agressivas.

A conclusão geral que deve ser feita: ao escolher entre Rust e C ++, o desempenho da linguagem não pode mais ser um motivo para dar preferência ao C ++. Pelo menos sem testes adicionais.

A situação atual pode mudar?


Bastante. C, C ++ e Rust mostram resultados muito próximos. Agora, a diferença é tão insignificante que o erro de medição afeta significativamente a distribuição dos primeiros lugares na classificação geral. É possível que, no próximo mês, Rust e C ++ mudem de lugar novamente, ou C dê lugar a Rust ou C ++ primeiro.

Devemos esperar mais melhorias no desempenho do Rust?


Sim O compilador Rust é um projeto relativamente jovem e um número significativo de otimizações possíveis ainda não foi totalmente implementado. O principal obstáculo é o LLVM, que formalmente, embora seja um tradutor universal, é na prática bem otimizado para C / C ++ e não se dá muito bem com o bytecode (IR) obtido de outras linguagens de programação.

Rust é uma linguagem de programação mais rigorosa que C e C ++. Isso significa que, para um programa típico, o Rust pode dar muito mais garantias ao tradutor (LLVM), que por sua vez pode usá-los para realizar otimizações mais agressivas.

Assim, é esperado que, nos próximos anos, a Rust consiga melhorar significativamente seu desempenho. Ao mesmo tempo, os compiladores C / C ++ estão em desenvolvimento há várias décadas e, durante esse período, atingiram o limite de seus recursos. Suas otimizações adicionais são limitadas principalmente por recursos de idioma, em vez de implementações de compilador.

Apenas alguns anos atrás, poucos poderiam imaginar que é possível escrever código com maior eficiência, com desempenho superior às implementações de C / C ++, usando uma nova linguagem de programação e até (Deus não permita) uma abordagem funcional. Penso que nos próximos anos, Rust provará o contrário pelo exemplo, começando a ocupar um primeiro lugar confiante em vários testes de desempenho. E você?

Source: https://habr.com/ru/post/pt480608/


All Articles