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?
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:
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.
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.
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:
Après tout, c'est à lui de décider ...
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.
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.
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/ .