"PyPy est une ré-implémentation de Python en Python" est un peu trompeuse façon de décrire PyPy, à mon humble avis, même si c'est techniquement vrai.
Il y a deux grandes parties de PyPy.
- La traduction du cadre
- L'interprète
La traduction est le cadre d'un compilateur. Il compile RPython code en bas à C (ou d'autres objectifs), l'ajout automatique dans des aspects tels que la collecte des ordures et un compilateur JIT. Il ne peut pas gérer arbitraire de code Python, seulement RPython.
RPython est un sous-ensemble de la normale Python; tous les RPython code est le code Python, mais pas l'inverse. Il n'y a pas de définition officielle de RPython, parce que RPython est fondamentalement juste "le sous-ensemble de Python qui peut être traduit par PyPy de la traduction du cadre". Mais pour être traduit, RPython code doit être typé statiquement (les types sont déduits, vous ne déclarez pas, mais c'est toujours strictement un type de variable), et vous ne pouvez pas faire des choses comme la déclaration de/de la modification des fonctions/classes au moment de l'exécution.
L'interprète est alors normal de l'interpréteur Python écrit en RPython.
Parce que RPython code est normal que le code Python, vous pouvez l'exécuter sur n'importe quel interpréteur Python. Mais aucun de PyPy de la vitesse de réclamations proviennent de l'exécution de cette manière; c'est juste pour un test de dépistage rapide du cycle, parce que la traduction de l'interprète prend un long temps.
Avec ce compris, il doit être immédiatement évident que les spéculations sur PyPyPy ou PyPyPyPy ne fait aucun sens. Vous avez un interprète écrit dans RPython. Vous le traduire en code C qui exécute Python rapidement. De là, le processus s'arrête; il n'y a plus RPython pour accélérer la transformation de nouveau.
Si "Comment est-il possible de PyPy être plus rapide que Disponible" devient assez évident. PyPy a une meilleure mise en œuvre, y compris un compilateur JIT (ce n'est généralement pas tout à fait aussi vite sans le compilateur JIT, je crois, ce qui signifie que PyPy est seulement plus rapide pour les programmes sensibles à la JIT-compilation). Disponible n'a jamais été conçu pour être hautement optimisation de la mise en œuvre du langage Python (bien qu'ils tentent de faire un très optimisé mise en œuvre, si vous suivez la différence).
La de vraiment novateur peu de la PyPy projet, c'est qu'ils n'écrivent pas sophistiqué GC régimes ou les compilateurs JIT par la main. Ils écrivent l'interprète relativement simple de le faire dans RPython, et pour tous les RPython est de niveau inférieur à celui de Python c'est toujours orientée objet ordures de la langue, de beaucoup plus haut niveau que C. Ensuite, la traduction du cadre automatiquement ajoute des choses comme le GC et le JIT. Donc la traduction framework est un énorme effort, mais il s'applique aussi bien à la PyPy de l'interpréteur python cependant ils changent leur mise en œuvre, permettant beaucoup plus de liberté dans l'expérimentation pour améliorer les performances (sans se soucier de l'introduction de GC de bugs ou de la mise à jour du compilateur JIT pour faire face aux changements). Il signifie aussi, quand ils se déplacent à la mise en œuvre d'un Python3 interprète, il sera automatiquement obtenir les mêmes avantages. Et tous les autres interprètes écrit avec la PyPy cadre (dont un certain nombre sont à différents stades de polonais). Et tous les interprètes à l'aide de la PyPy cadre automatiquement en charge toutes les plates-formes prises en charge par le framework.
Donc, le véritable avantage de la PyPy projet est de séparer (autant que possible) de toutes les parties de la mise en œuvre efficace de la plate-forme indépendante interpréteur pour un langage dynamique. Et viennent ensuite avec une bonne mise en œuvre en un seul endroit, qui peut être ré-utilisée dans de nombreux interprètes. Ce n'est pas immédiate gagner comme "mon Python programme s'exécute plus vite maintenant", mais c'est un grand espoir pour l'avenir.
Et il peut exécuter un programme Python est plus rapide (peut-être).