Développeur : PyPy, le serpent qui se mord la queue, sort en version 0.99
Posté par Victor STINNER (page perso, ). Modéré le 22 février 2007.
PyPy est un projet financé par l'Union Européenne qui vise à écrire un interpréteur Python en Python. Le projet est sur le point d'aboutir : il n'est plus que 3x plus lent que l'implémentation de référence (CPython) avec laquelle il est compatible à 98%.
PyPy apporte de nombreuses améliorations à Python comme les « espaces d'objet », la programmation logique, la programmation concurrente, etc. Une partie de l'interpréteur Python est écrite en RPython, sous-ensemble limité de Python, ce qui permet de le compiler pour LLVM, .NET ou encore en C.
La version 0.99 apporte un backend pour la plateforme .NET, beaucoup de travail sur le backend JavaScript (AJAX fonctionne), et les derniers modules Python qui manquaient ont été écrits : mmap, signal, bz2 et fcntl.
Encore une fois, un gros travail a été fait sur l'optimisation : limitation des appels à malloc(), inlining, accélération des dictionnaires, etc. Cette version est deux fois plus rapide que la précédente, mais l'ajout du compilateur JIT devrait encore améliorer les performances de la prochaine version.
PyPy apporte de nombreuses améliorations à Python comme les « espaces d'objet », la programmation logique, la programmation concurrente, etc. Une partie de l'interpréteur Python est écrite en RPython, sous-ensemble limité de Python, ce qui permet de le compiler pour LLVM, .NET ou encore en C.
La version 0.99 apporte un backend pour la plateforme .NET, beaucoup de travail sur le backend JavaScript (AJAX fonctionne), et les derniers modules Python qui manquaient ont été écrits : mmap, signal, bz2 et fcntl.
Encore une fois, un gros travail a été fait sur l'optimisation : limitation des appels à malloc(), inlining, accélération des dictionnaires, etc. Cette version est deux fois plus rapide que la précédente, mais l'ajout du compilateur JIT devrait encore améliorer les performances de la prochaine version.
PyPy (1115 hits)
Annonce de la version 0.99 (219 hits)
Rapports de recherche (265 hits)
> Lire la dépêche (51 commentaires, moyenne: 3).
Vous avez demandé le commentaire #806763.




un très bon exemple
pour ceux que ça interesse, il y a une petite manip décrite ici qui permet d'effleurer les possibilités de pypy :
http://programming.reddit.com/info/152lr/comments/c156v0
Moi ce projet, il me fait délirer. Et le gain qu'il va apporter à python est incommensurable ...
manatlan.com
[^]Re: un très bon exemple
Tu peux m'expliquer et me donner des exemples de ce que ça va apporter ? Personnellement, je trouve ça chouette comme recherche théorique, mais je ne vois pas d'intérêt direct en fait. (j'ai pas approfondi non plus)
[^]Re: un très bon exemple
J'étais justement en train de poster un commentaire similaire.
Les choses sont expliquées ici, mais je n'ai jamais lu de vulgarisation bien faite.
http://codespeak.net/pypy/dist/pypy/doc/architecture.html#mi(...)
On entend juste « implémentation de python en python ». Après une introduction comme ça, 1% des gens vont prendre la peine de creuser un peu pour découvrir ce que ça apporte.
[^]Re: un très bon exemple
oui, j'ai aussi beaucoup de mal à cerner la bête ... même après la lecture (ultra interessante) du site de pypy ...
Le premier gros apport, c'est facilité la maintenance/evolution de python. Python est codé en C, et l'ajout de fonctionnalités/evolutions commence à devenir un petit cauchemar dans certains cas. Le fait de pour coder python, en python va énormément simplifier la maintenance/evolution du language.
Un autre apport, c'est la couche basse "rpython", si j'ai bien compris. Tout en programmant en python, on pourra targetter ... soit du C, soit du .Net, soit du javascript (d'autres devrait suivre, pk il suffit de faire les traductions "rpython -> destination").
Développer une appli web entièrement en python, qui fabriquera le code JS/ajax coté client est déjà une réalitée ( http://play1.codespeak.net:8008/ )
Une fois la VM bien rodé, d'autres languages (ruby par exemple, en fabriquant le traducteur ruby->rpython) pourrait générer du python, du c, du .net ou autres ... bref, le début d'une VM communautaire (ala CLR)
(Et je crois qu'il y a aussi l'idée de réduire le runtime au minimum)
Voilà ce que j'ai un peu prêt compris ...
manatlan.com
[^]Re: un très bon exemple
Il y a beaucoup de confusion à propos de pypy, Beaucoup pensent que pypy va permettre de convertir de code python en C, mais ce n'est pas le cas, il ne permet que de convertir du code Rpython en d'autre language et selon les développeur de pypy (en tous cas ceux qui était sur #pypy sur freenode quand je me suis informé), Coder en Rpython est plutôt chiant et celui-ci n'est destiné qu'à coder Python en Rpython et non coder des applications...
[^]Re: un très bon exemple
tu devrais relire ici :
http://codespeak.net/pypy/dist/pypy/doc/getting-started.html(...)
il y a des exemples où il transforme clairement un fichier ".py" en binaire executable (via llvm)... tout n'est pas encore au point certes ...
manatlan.com
[^]Re: un très bon exemple
Le premier gros apport, c'est facilité la maintenance/evolution de python. Python est codé en C, et l'ajout de fonctionnalités/evolutions commence à devenir un petit cauchemar dans certains cas.
De par sa nature très modulaire, PyPy permet également des changements majeurs dans l'implémentation de Python. CPython utilise par exemple un ramasse miette à générations. C'est un choix, mais PyPy en permet d'autres, ce qui permet de comparer les performances et de choisir une alternative qui serait plus rapide dans un cas précis. D'ailleurs, PyPy a déjà des outils pour supprimer des malloc().
La mémoire n'était qu'un exemple, mais la gestion des processus concurrents est également remise en question : thread, greenlets, proxy d'objet fonctionnant sur réseau, clonage de générateur... PyPy apporte encore une fois un air frais dans ce domaine.
Et alors que CPython n'optimise peu ou pas, PyPy fait de l'inlining, a un annotateur de type, permet de compiler dans de nombreux langages, etc. Il offre la possibilité d'optimisations très complexes qui seraient impossibles avec CPython.
[^]Re: un très bon exemple
Le site web de pypy est out en ce moment, mais dans mon souvenir, le principal intérêt de pypy est d'avoir une espèce de générateur d'interpréteur python.
Au lieu d'avoir un interpreteur python avec des fonctionnalités édictées une fois pour toute dans la spec, on pourrait "faire ses courses" en terme de fonctionnaliteset générer un interpréteur sur mesure.
Cela permet de modifier la grammaire de python pour des projets dédiés (programmation oriente aspect, programmation par contrat sont les exemples cités, mais on peut en trouver d'autres). On garde donc les principes de base du langage python, mais les fonctionnalités sont extensibles à merci.
J'avais posé une question à l'époque sur la faisabilité d'une inférence de type à la ocaml. C'est là qu'on m'a renvoyé vers pypy où ce genre de chose est envisageable (meme si je ne crois pas que ce soit au programme pour l'instant).
En ce qui me concerne, ce qui m'intéresserait à l'heure actuelle, ce serait une réduction de fonctionnalité : dans la façon dont j'utilise python, le typage dynamique me crée plus de problèmes qu'il n'en résoud. Je préfererai avoir un typage statique, ou en tout cas, l'interdiction a une variable de changer de type au cours de son existence. C'est possible grâce à pypy.
Maintenant, les inconvénients : d'une part, c'est quand même beaucoup plus lent, alors que python n'est déjà pas renommé pour sa vitesse. Ensuite, ça veut dire qu'on va peut-être récuperer des softs qui ne marchent qu'avec un certain jeu de fonctionnalité de l'interpréteur python, et qu'ils seront incompatibles avec d'autres softs utilisant un jeu de fonctionnalité différent.
phil.freehackers.org
[^]Re: un très bon exemple
> bref, le début d'une VM communautaire
Cela existe déjà, cela s'appelle Parrot. C'est une machine orienté pour les langages de script contrairement à la JVM et à .Net.
http://www.parrotcode.org/
[^]Re: un très bon exemple
L'intérêt est évident : Si a force d'optimisation PyPy devient plus rapide que CPython, il suffira de lancer PyPy sous PyPy pour qu'il soit encore plus rapide. Et ainsi de suite, on peux tendre vers un temps d'exécution nul en empilant les PyPy.
C'est méga-prometteur quoi !
[+] [^]Re: un très bon exemple
S'il est plus rapide que CPython, il est plus rapide que CPython, point.
Je ne vois pas pourquoi lancer plusieurs fois pypy sur lui même le rendrait plus rapide
[^]Re: un très bon exemple
humour toussa ;-)
le paradoxe de Zénon à l'envers si tu veux ;-)
[^]Re: un très bon exemple
oups désolé :)
(non pas désolé, j'ai eu les moins que je méritais)
[^]Re: un très bon exemple
je crois que c'était une blague ;-)
même un blague culturel, car la devise de pypy (si je me souviens bien, car le site est down now), c'est "faster than C"
manatlan.com
[^]Re: un très bon exemple
> la devise de pypy (si je me souviens bien, car le site est down now)
"pypy, faster than CaCa" ?
-->[]