Eu estava olhando para o PyPy e estava me perguntando por que ele não foi adotado nas distribuições principais do Python. Coisas como a compilação JIT e a menor pegada de memória melhorariam muito as velocidades de todo o código Python?
Em resumo, quais são as principais desvantagens do PyPy que fazem com que ele permaneça um projeto separado?
Respostas:
O PyPy não é um fork do CPython, portanto nunca pode ser mesclado diretamente no CPython.
Teoricamente, a comunidade Python poderia adotar universalmente o PyPy, o PyPy poderia ser implementado como referência e o CPython poderia ser descontinuado. No entanto, o PyPy tem suas próprias fraquezas:
O PyPy é um ótimo projeto, mas a velocidade de tempo de execução em tarefas que exigem muita CPU não é tudo, e em muitos aplicativos é a menor das muitas preocupações. Por exemplo, o Django pode rodar no PyPy e isso torna a modelagem mais rápida, mas os drivers de banco de dados do CPython são mais rápidos que o do PyPy; no final, qual implementação é mais eficiente depende de onde está o gargalo em um determinado aplicativo.
Outro exemplo: você pensaria que o PyPy seria ótimo para jogos, mas a maioria das estratégias de GC, como as usadas no PyPy, causam tremores visíveis. Para o CPython, a maioria das coisas de jogo com uso intenso de CPU é transferida para a biblioteca PyGame, da qual o PyPy não pode tirar vantagem, já que o PyGame é implementado principalmente como uma extensão C (embora veja: pygame-cffi). Ainda acho que o PyPy pode ser uma ótima plataforma para jogos, mas nunca o vi realmente usado.
O PyPy e o CPython têm abordagens radicalmente diferentes para questões fundamentais de design e fazem trocas diferentes; portanto, nenhuma é "melhor" que a outra em todos os casos.
fonte
Por um lado, não é 100% compatível com o Python 2.x e possui apenas suporte preliminar ao 3.x.
Também não é algo que possa ser mesclado - a implementação do Python fornecida pelo PyPy é gerada usando uma estrutura que eles criaram, o que é extremamente legal, mas também completamente diferente da implementação do CPython existente. Teria que ser uma substituição completa.
Existem algumas diferenças muito concretas entre o PyPy e o CPython, sendo uma grande a forma como os módulos de extensão são suportados - o que, se você quiser ir além da biblioteca padrão, é um grande problema.
Também vale a pena notar que o PyPy não é universalmente mais rápido.
fonte
Veja este vídeo de Guido van Rossum . Ele fala sobre a mesma pergunta que você fez aos 12 minutos e 33 segundos.
Luzes:
Afinal, ele é o único a decidir ...
fonte
Uma razão pode ser que, de acordo com o site PyPy , ele atualmente seja executado apenas na arquitetura Intel x86 de 32 e 64 bits, enquanto o CPython também é executado em outras plataformas. Provavelmente, isso se deve a aprimoramentos de velocidade específicos da plataforma no PyPy. Embora a velocidade seja uma coisa boa, as pessoas geralmente querem que as implementações de linguagem sejam o mais "independentes de plataforma" possível.
fonte
Eu recomendo assistir a esta palestra de David Beazley para mais informações. Responde à sua pergunta, dando clareza sobre a natureza e os meandros do PyPy.
fonte
Além de tudo o que foi dito aqui, o PyPy não é tão sólido quanto o CPython em termos de bugs. Com o SymPy, encontramos cerca de uma dúzia de bugs no PyPy nos últimos dois anos, nas versões lançadas e nas noites.
Por outro lado, apenas encontramos um bug no CPython, que estava em um pré-lançamento.
Além disso, não descarte a falta de suporte ao Python 3. Ninguém na comunidade principal do Python se preocupa mais com o Python 2. Eles estão trabalhando nas próximas grandes novidades do Python 3.4, que será o quinto grande lançamento do Python 3. Os caras do PyPy ainda não conseguiram um deles. Então, eles precisam se atualizar antes de começarem a ser candidatos.
Não me interpretem mal. PyPy é incrível. Mas ainda está longe de ser melhor que o CPython de muitas maneiras muito importantes.
A propósito, se você usar o SymPy no PyPy, não verá uma pegada de memória menor (ou uma aceleração). Consulte https://bitbucket.org/pypy/pypy/issues/1447/ .
fonte