É outubro mais uma vez, o que significa que é hora de testar o novo lançamento do Python (tecnicamente, estou usando o lançamento 3.15.0rc3, o lançamento oficial 3.15 ainda falta alguns dias). Como fiz com meu artigo de desempenho do Python 3.14 há um ano, hoje compartilho uma nova execução do meu benchmark informal, comparando Python 3.15 com intérpretes anteriores que vão desde a 3.10. Se você não se interessa por gráficos e tabelas e apenas quer ler meu análise, sinta-se à vontade para pular para a seção de conclusões no final.
O benchmark que chamei de "informal" significa o quê? Objetiva e universalmente medir o desempenho de uma linguagem de programação é impossível. O que você pode fazer é escrever alguns programas e executá-los para obter uma medida de seu desempenho. Outros programas podem mostrar características de desempenho semelhantes ou podem não, realmente não há como saber.
Minha intenção com este benchmark é apenas sentir as mudanças de desempenho across as versões do Python, mas quero deixar claro que não estou tentando obter um perfil de desempenho completo do interpretador Python. Para o meu benchmark, executarei dois programas chamados fibo.py e bubble.py, que você pode inspecionar se gostar. Estes são os mesmos programas que utilizei em edições anteriores deste benchmark.
O primeiro calcula números da sequência de Fibonacci, e o segundo ordena números usando o algoritmo bubble sort. Escolhi estes dois programas como representativos de duas classes de algoritmos. O cálculo de Fibonacci é feito usando recursão, que encontrei algo ineficiente em intérpretes Python.
Do outro lado, o bubble sort apenas usa for-loops, sem nenhuma recursão. Há outros tipos de programas que meu benchmark não tenta cobrir. Em particular, note que não estou incluindo código I/O limitado neste benchmark.
Porque algumas melhorias de desempenho em versões recentes do Python giram em torno do multithreading, também criei uma variação multithreaded para cada programa, então no total tenho quatro testes diferentes. A matriz de testes completa é na verdade bastante complexa, porque tenho que executar as quatro variações de programa sob todas as versões do Python, mais as alternativas JIT e free-threading para aqueles que têm. Gosto de executar os testes sob Py Py também, porque este interpretador tem mostrado desempenho impressionante em execuções anteriores deste benchmark.
E para situar o desempenho do Python dentro do ecossistema mais amplo, também portei os dois programas para Java Script (Node.js) e Rust. Aqui está a matriz de testes completa com a qual trabalhei: 2 scripts de teste: fibo.py: calcula números da sequência de Fibonacci, com recursão; bubble.py: ordena uma lista de números gerados aleatoriamente, sem recursão. 2 modos de thread: Single-threaded; 4 threads paralelas. 6 versões de Python, mais versões recentes de Py Py, Node.js e Rust: CPython 3.10, 3.11, 3.12, 3.13, 3.14, 3.15; Py Py 3.12; Node 26.3; Rust 1.97. 3 intérpretes Python: Standard; Just-In-Time (JIT): apenas para CPython 3.13+ ; Free-threading (FT): apenas para CPython 3.13+. Leitores dos meus benchmarks anteriores podem lembrar que tinha uma dimensão adicional na minha matriz para Linux vs. mac OS.
Dado que não houve diferenças significativas entre eles nas duas anteriores execuções do benchmark, decidi descartar os testes de mac OS desta vez, então todos os testes foram executados no meu laptop com Linux, que tem um processador Intel Core i5 e roda Gentoo Linux. O método que uso para medir o desempenho de cada participante deste benchmark é executar o programa de teste três vezes e pegar a duração média dos três. Nas tabelas de resultados que compartilho abaixo, também mostro a diferença de velocidade versus a versão 3.15, e quando faz sentido também a diferença de velocidade versus a versão anterior de um dado intérprete.
Para comparações de velocidade, uso uma razão simples, onde 1x significa mesma velocidade, 0.5x significa metade da velocidade (ou que levou o dobro de tempo para...
Fonte: Hacker News · Resumido por HeadlinesBriefing