"PyPy é uma reimplementação do Python no Python" é uma maneira bastante enganadora de descrever o PyPy, IMHO, embora seja tecnicamente verdade.
Existem duas partes principais do PyPy.
- A estrutura de tradução
- O intérprete
A estrutura de tradução é um compilador. Ele compila o código RPython até C (ou outros destinos), adicionando automaticamente aspectos como coleta de lixo e um compilador JIT. Ele não pode manipular código Python arbitrário, apenas RPython.
RPython é um subconjunto do Python normal; todo o código RPython é código Python, mas não o contrário. Não existe uma definição formal de RPython, porque o RPython é basicamente apenas "o subconjunto do Python que pode ser traduzido pela estrutura de tradução do PyPy". Mas, para ser traduzido, o código RPython precisa ser digitado estaticamente (os tipos são inferidos, você não os declara, mas ainda é estritamente um tipo por variável), e você não pode fazer coisas como declarar / modificar funções / classes em tempo de execução também.
O intérprete é então um intérprete Python normal escrito em RPython.
Como o código RPython é normal, você pode executá-lo em qualquer interpretador Python. Porém, nenhuma das reivindicações de velocidade da PyPy é executada dessa maneira; isso é apenas para um ciclo de teste rápido, porque a tradução do intérprete leva muito tempo tempo.
Com isso entendido, deve ser imediatamente óbvio que especulações sobre PyPyPy ou PyPyPyPy não fazem realmente nenhum sentido. Você tem um intérprete escrito em RPython. Você o traduz para o código C que executa o Python rapidamente. Aí o processo para; não há mais RPython para acelerar processando-o novamente.
Assim, "Como é possível que o PyPy seja mais rápido que o CPython" também se torna bastante óbvio. O PyPy tem uma implementação melhor, incluindo um compilador JIT (geralmente não é tão rápido sem o compilador JIT, acredito, o que significa que o PyPy é apenas mais rápido para programas suscetíveis à compilação JIT). O CPython nunca foi projetado para ser uma implementação altamente otimizada da linguagem Python (embora eles tentem torná-la uma implementação altamente otimizada , se você seguir a diferença).
A parte realmente inovadora do projeto PyPy é que eles não escrevem esquemas sofisticados de GC ou compiladores JIT manualmente. Eles escrevem o intérprete de maneira relativamente direta no RPython, e para todo o RPython é de nível inferior ao Python, ainda é uma linguagem de coleta de lixo orientada a objetos, muito mais alta que C. Então a estrutura de tradução adiciona automaticamente coisas como GC e JIT. Portanto, a estrutura de tradução é uma enorme, mas se aplica igualmente bem ao intérprete PyPy python, no entanto, eles mudam sua implementação, permitindo muito mais liberdade na experimentação para melhorar o desempenho (sem se preocupar em introduzir bugs do GC ou atualizar o compilador JIT para lidar com as mudanças). Isso também significa que, quando eles implementarem um interpretador Python3, obterá automaticamente os mesmos benefícios. E quaisquer outros intérpretes escritos com a estrutura PyPy (dos quais existem vários em diferentes estágios de polimento). E todos os intérpretes que usam a estrutura PyPy suportam automaticamente todas as plataformas suportadas pela estrutura.
Portanto, o verdadeiro benefício do projeto PyPy é separar (o máximo possível) todas as partes da implementação de um intérprete independente de plataforma eficiente para uma linguagem dinâmica. E, em seguida, crie uma boa implementação deles em um só lugar, que possa ser reutilizada em muitos intérpretes. Não é uma vitória imediata como "meu programa Python roda mais rápido agora", mas é uma grande perspectiva para o futuro.
E pode executar o seu programa Python mais rápido (talvez).