web-dev-qa-db-fra.com

Pourquoi PyPy n'a-t-il pas été inclus dans Python standard?

Je regardais PyPy et je me demandais simplement pourquoi il n'a pas été adopté dans la distribution principale Python. Des choses comme la compilation JIT et une empreinte mémoire réduite améliorer grandement les vitesses de tous Python code?

En bref, quels sont les principaux inconvénients de PyPy qui l’empêchent de rester un projet à part?

161
KLee1

PyPy n'est pas un fork de CPython, il ne pourrait donc jamais être fusionné directement dans CPython.

Théoriquement, la communauté Python pourrait universellement adopter PyPy, PyPy pourrait devenir l'implémentation de référence et CPython pourrait être interrompu. Cependant, PyPy a ses propres faiblesses:

  • Il est facile intégrer CPython avec Python modules écrits en C, ce qui est traditionnellement le moyen Python gèrent des tâches gourmandes en ressources CPU (voir par exemple le projet SciPy ).
  • L'étape de compilation de PyPy JIT en elle-même coûte du temps CPU - ce n'est que par l'exécution répétée du code compilé qu'il devient globalement plus rapide. Cela signifie que les temps de démarrage peuvent être plus longs et que, par conséquent, PyPy n'est pas nécessairement aussi efficace pour exécuter du code glu ou des scripts triviaux.
  • Les comportements PyPy et CPython ne sont pas identiques à tous égards, en particulier en ce qui concerne les "détails de mise en oeuvre" (comportement qui n'est pas spécifié par le langage mais qui reste important au niveau pratique).
  • CPython fonctionne sur plus d'architectures que PyPy et a été adapté avec succès pour fonctionner dans des architectures intégrées d'une manière qui pourrait ne pas être pratique pour PyPy.
  • Le schéma de comptage de références de CPython pour la gestion de la mémoire a sans doute des impacts plus prévisibles sur les performances que les différents systèmes de gestion de données de PyPy, bien que cela ne soit pas nécessairement vrai de toutes les stratégies "pur GC".
  • PyPy ne supporte pas encore totalement Python 3.x, bien que ce soit un élément de travail actif.

PyPy est un excellent projet, mais la vitesse d'exécution sur les tâches gourmandes en ressources processeur n'est pas tout, et dans de nombreuses applications, c'est le moindre des soucis. Par exemple, Django peut s'exécuter sur PyPy, ce qui accélère la modélisation, mais les pilotes de base de données de CPython sont plus rapides que PyPy; à la fin, l'implémentation est plus efficace, cela dépend du point de blocage dans une application donnée. est.

Autre exemple: on pourrait penser que PyPy serait bien pour les jeux, mais la plupart des stratégies de GC, comme celles utilisées dans PyPy, provoquent une gigue évidente. Pour CPython, la plupart des éléments de jeu gourmands en ressources processeur sont transférés dans la bibliothèque PyGame, dont PyPy ne peut tirer parti, PyGame étant principalement implémenté en tant qu'extension C (voir cependant: pygame-cffi). Je pense toujours que PyPy peut être une excellente plateforme pour les jeux, mais je ne l’ai jamais vue réellement utilisée.

PyPy et CPython ont des approches radicalement différentes des questions de conception fondamentales et font des compromis différents, de sorte qu'aucun des deux n'est "meilleur" que l'autre dans tous les cas.

244
Andrew Gorcester

D'une part, c'est non compatible à 100% avec Python 2.x, et a seulement support préliminaire pour 3.x.

Ce n’est pas non plus quelque chose qui pourrait être fusionné - L’implémentation fournie par PyPy Python) est générée à l’aide du framework qu’ils ont créé, ce qui est extrêmement cool, mais complètement différent de l’implémentation CPython existante. Ce serait un remplacement complet.

Il y a quelques différences très concrètes entre PyPy et CPython, le plus important étant comment modules d'extension sont supportés - ce qui, si vous voulez aller au-delà de la bibliothèque standard, est un gros traiter.

Il est également intéressant de noter que PyPy n'est pas universellement plus rapide.

62
Gareth Latty

Voir cette vidéo de Guido van Rossum . Il parle de la même question que vous avez posée à 12 min 33 s.

Points forts:

  • manque de compatibilité Python 3
  • manque de support d'extension
  • non approprié comme code de colle
  • la vitesse n'est pas tout

Après tout, c'est à lui de décider ...

52
none

Une des raisons pourrait être que, selon PyPy , il ne fonctionne actuellement que sur les architectures Intel x86 32 et 64 bits, tandis que CPython fonctionne également sur d'autres plates-formes. Ceci est probablement dû aux améliorations de vitesse spécifiques à la plate-forme dans PyPy. Bien que la rapidité soit une bonne chose, les utilisateurs souhaitent souvent que les implémentations linguistiques soient aussi "indépendantes de la plate-forme" que possible.

14
Bitwise

Je recommande de regarder ce discours par David Beazley pour plus d'informations. Il répond à votre question en clarifiant la nature et les subtilités de PyPy.

7
Abhishek Mishra

En plus de tout ce qui a été dit ici, PyPy n’est pas aussi solide que CPython en termes de bugs. Avec SymPy, nous avons trouvé environ une douzaine de bugs dans PyPy au cours des deux dernières années, à la fois dans les versions publiées et dans les nightlies.

D'autre part, nous n'avons jamais trouvé qu'un seul bogue dans CPython, et c'était dans une pré-version.

De plus, ne négligez pas le manque de support Python 3. Personne dans le noyau Python la communauté se soucie même de Python = 2. Ils travaillent sur les prochaines grandes choses dans Python 3.4, qui sera la cinquième version majeure de Python 3. Les gars de PyPy restent Alors, ils ont du retard à rattraper avant de pouvoir commencer à être des prétendants.

Ne vous méprenez pas. PyPy est génial. Mais il est encore loin d’être meilleur que CPython à bien des égards très importants.

Et au fait, si vous utilisez SymPy dans PyPy, vous ne verrez pas une empreinte mémoire plus petite (ni une accélération non plus). Voir https://bitbucket.org/pypy/pypy/issues/1447/ .

6
asmeurer