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




pypy windows (4)

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 bogues dans PyPy au cours des deux dernières années, à la fois dans les versions publiées et dans les nightlies.

D'un autre côté, nous avons seulement trouvé un bug dans CPython, et c'était dans une pré-version.

De plus, ne négligez pas le manque de support de Python 3. Personne dans la communauté Python ne se soucie même plus 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 n'en ont toujours pas eu. Donc, ils ont du rattrapage à faire avant de pouvoir devenir des prétendants.

Ne vous méprenez pas. PyPy est génial. Mais c'est encore loin d'être meilleur que CPython de plusieurs façons très importantes.

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

https://code.i-harness.com

Je regardais PyPy et je me demandais juste pourquoi il n'a pas été adopté dans les principales distributions Python. Des choses comme la compilation de JIT et l'empreinte de la mémoire inférieure ne pourraient-elles pas grandement améliorer les vitesses de tout le code Python?

En bref, quels sont les principaux inconvénients de PyPy qui en font un projet à part entière?


Je recommande de regarder cette keynote par David Beazley pour plus d'idées. Il répond à votre question en donnant de la clarté sur la nature et les subtilités de PyPy.


Pour l'un, ce n'est pas 100% compatible avec Python 2.x, et a seulement un support préliminaire pour 3.x.

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

Il y a des différences très concrètes entre PyPy et CPython, une grande étant la façon dont les modules d'extension sont supportés - ce qui, si vous voulez aller au-delà de la bibliothèque standard, est un gros problème.

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


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

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

  • CPython est facile à intégrer avec les modules Python écrits en C, qui sont traditionnellement la façon dont les applications Python ont géré les tâches gourmandes en ressources CPU (voir par exemple le projet SciPy).
  • L'étape de compilation de PyPy JIT elle-même coûte du temps CPU - c'est seulement par l'exécution répétée de code compilé que cela devient plus rapide dans l'ensemble. Cela signifie que les temps de démarrage peuvent être plus élevés, et donc PyPy n'est pas nécessairement aussi efficace pour exécuter du code de collage ou des scripts triviaux.
  • Le comportement de PyPy et de CPython n'est pas identique à tous les égards, particulièrement quand il s'agit de «détails d'implémentation» (comportement qui n'est pas spécifié par le langage mais qui est toujours important au niveau pratique).
  • CPython utilise plus d'architectures que PyPy et a été adapté avec succès pour fonctionner dans des architectures embarquées d'une manière qui peut être difficile pour PyPy.
  • Le système de comptage de référence de CPython pour la gestion de la mémoire a sans doute des impacts de performance plus prévisibles que les différents systèmes GC de PyPy, bien que cela ne soit pas nécessairement vrai de toutes les stratégies de «GC pur».
  • PyPy ne supporte pas encore complètement Python 3.x, bien que ce soit un élément de travail actif.

PyPy est un excellent projet, mais la vitesse d'exécution des tâches gourmandes en ressources processeur n'est pas tout, et dans de nombreuses applications, c'est la moindre des préoccupations. Par exemple, Django peut s'exécuter sur PyPy et cela rend la création de modèles plus rapide, mais les pilotes de base de données de CPython sont plus rapides que ceux de PyPy; à la fin, quelle implémentation est la plus efficace dépend de l'endroit où se trouve le goulot d'étranglement dans une application donnée.

Un autre exemple: vous penseriez que PyPy serait génial pour les jeux, mais la plupart des stratégies du GC comme celles utilisées dans PyPy provoquent une gigue perceptible. Pour CPython, la majeure partie du contenu du jeu gourmand en CPU est déchargée dans la bibliothèque PyGame, dont PyPy ne peut tirer parti puisque PyGame est principalement implémenté en tant qu'extension C (bien que voir: pygame-cffi). Je pense toujours que PyPy peut être une excellente plate-forme pour les jeux, mais je ne l'ai jamais vu réellement utilisé.

PyPy et CPython ont des approches radicalement différentes des questions de conception fondamentales et font des compromis différents, de sorte que ni l'un ni l'autre ne sont «meilleurs» que l'autre dans tous les cas.





pypy