Mas existem limitações técnicas ou recursos de linguagem que impedem que meu script Python seja tão rápido quanto um programa C ++ equivalente?
Não. É apenas uma questão de dinheiro e recursos despejados para fazer o C ++ rodar rápido versus dinheiro e recursos despejados para fazer o Python rodar rápido.
Por exemplo, quando a Self VM foi lançada, não era apenas o idioma OO dinâmico mais rápido, era o período do idioma OO mais rápido. Apesar de ser uma linguagem incrivelmente dinâmica (muito mais que Python, Ruby, PHP ou JavaScript, por exemplo), foi mais rápida que a maioria das implementações de C ++ disponíveis.
Mas a Sun cancelou o projeto Self (uma linguagem OO de uso geral madura para o desenvolvimento de grandes sistemas) para se concentrar em uma pequena linguagem de script para menus animados em caixas de TV (você deve ter ouvido falar sobre isso, chama-se Java). mais financiamento. Ao mesmo tempo, Intel, IBM, Microsoft, Sun, Metrowerks, HP et al. gastou grandes quantias de dinheiro e recursos, tornando o C ++ rápido. Os fabricantes de CPU adicionaram recursos aos seus chips para acelerar o C ++. Os sistemas operacionais foram escritos ou modificados para acelerar o C ++. Então, o C ++ é rápido.
Não estou muito familiarizado com o Python, sou mais uma pessoa Ruby, por isso darei um exemplo do Ruby: a Hash
classe (equivalente em função e importância ao dict
Python) na implementação do Rubinius Ruby é escrita em 100% puro Ruby; no entanto, ele compete favoravelmente e às vezes supera a Hash
classe no YARV, escrita em C. otimizado à mão. E comparado a alguns dos sistemas comerciais Lisp ou Smalltalk (ou a mencionada Self VM), o compilador de Rubinius não é tão inteligente .
Não há nada inerente ao Python que o torne lento. Existem recursos nos processadores e sistemas operacionais de hoje que prejudicam o Python (por exemplo, a memória virtual é conhecida por ser terrível para o desempenho da coleta de lixo). Existem recursos que ajudam o C ++, mas não ajudam o Python (as CPUs modernas tentam evitar falhas de cache, porque são muito caras. Infelizmente, é difícil evitar falhas de cache quando você tem OO e polimorfismo. Em vez disso, você deve reduzir o custo do cache A CPU Azul Vega, projetada para Java, faz isso.)
Se você gasta tanto dinheiro, pesquisa e recursos para tornar o Python rápido, como foi feito para C ++, e gasta tanto dinheiro, pesquisa e recursos para tornar sistemas operacionais que fazem os programas em Python rodarem mais rápido quanto foi feito para C ++ e você gasta como muito dinheiro, pesquisa e recursos para criar CPUs que executam programas em Python mais rápido que o C ++, então não há dúvida de que o Python poderia atingir desempenho comparável ao C ++.
Vimos com o ECMAScript o que pode acontecer se apenas um jogador leva a sério o desempenho. Em um ano, tivemos basicamente um aumento de 10 vezes no desempenho geral para todos os principais fornecedores.