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. La version 1.0 finale incorporera tous les projets de recherche de PyPy :
- Un compilateur JIT qui devrait encore améliorer les performances. Il n'a pas été intégré à la version 0.99 car il ne donnait pas les résultats escomptés.
- Des extensions au parseur permettant de modifier la grammaire de Python. En particulier, on pourra facilement ajouter à Python des notions de programmation orientée aspect et de programmation par contrat.
- L'espace d'objet logique qui offre des variables logiques (à la manière de Prolog) et un résolveur de contrainte.
Ce n'est pas un effet d'annonce, le code existe et fonctionne, mais soit le code n'est pas assez testé, soit il est encore mal intégré au projet PyPy.
Aller plus loin
- PyPy (17 clics)
- Annonce de la version 0.99 (3 clics)
- Rapports de recherche (2 clics)
# un très bon exemple
Posté par manatlan (site web personnel) . Évalué à 6.
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 ...
[^] # Re: un très bon exemple
Posté par ploum (site web personnel, Mastodon) . Évalué à 6.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: un très bon exemple
Posté par ccomb (site web personnel) . Évalué à 5.
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
Posté par manatlan (site web personnel) . Évalué à 6.
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 ...
[^] # Re: un très bon exemple
Posté par Éric Martin . Évalué à 2.
[^] # Re: un très bon exemple
Posté par manatlan (site web personnel) . Évalué à 1.
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 ...
[^] # Re: un très bon exemple
Posté par Victor STINNER (site web personnel) . Évalué à 5.
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
Posté par Philippe F (site web personnel) . Évalué à 7.
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.
[^] # Re: un très bon exemple
Posté par Sytoka Modon (site web personnel) . Évalué à 5.
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
Posté par Wawet76 . Évalué à 10.
C'est méga-prometteur quoi !
[^] # Re: un très bon exemple
Posté par fridim . Évalué à -9.
Je ne vois pas pourquoi lancer plusieurs fois pypy sur lui même le rendrait plus rapide
[^] # Re: un très bon exemple
Posté par BAud (site web personnel) . Évalué à 8.
le paradoxe de Zénon à l'envers si tu veux ;-)
[^] # Re: un très bon exemple
Posté par fridim . Évalué à 3.
(non pas désolé, j'ai eu les moins que je méritais)
[^] # Re: un très bon exemple
Posté par manatlan (site web personnel) . Évalué à 4.
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"
[^] # Re: un très bon exemple
Posté par spart . Évalué à 0.
"pypy, faster than CaCa" ?
-->[]
# Et pour Caml ?
Posté par Julien . Évalué à 10.
Le jour ou l'UE aura financé PyPy et CaCa, on peut dire que la boucle sera alors bouclée.
Uhm, ok ... --> []
[^] # Re: Et pour Caml ?
Posté par dbaelde (site web personnel) . Évalué à 4.
En l'occurence le compilo Caml est bootstrapé depuis le début (dès Caml Light). Le runtime est écrit en C, mais la complexité bytecode Caml n'a rien à voir avec Python et même RPython.
L'avantage principal de cette approche est la maintenabilité -- écrire un compilo en Caml est inifiniment plus agréable qu'en C à mon gout. Accessoirement, ça assure que les gens qui écrivent le compilo programment dans le langage de destination, et s'impliquent donc sur sa qualité...
Pour finir, je suis déçu de lire que RPython est inutilisable. Quand j'ai appris l'existence de RPython je me suis dit que les Pythoneux découvraient enfin les horreurs cachées de leur langage et les écartaient en créant un sous-ensemble propre, RPython. Visiblement ce n'est pas le cas.
[^] # Re: Et pour Caml ?
Posté par ducon anonymous . Évalué à 1.
RPython reste infiniment plus agréable que du C en tous cas. C'est un langage jeune, car il a moins de deux ans d'âge, alors il faut un peu d'indulgence ... :)
[^] # Re: Et pour Caml ?
Posté par B16F4RV4RD1N . Évalué à 10.
---> (oui je sais, commentaire de chiotte...)
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Et pour Caml ?
Posté par karmatronic . Évalué à -5.
je te laisse je vais faire pypy
[^] # Re: Et pour Caml ?
Posté par Thomas Douillard . Évalué à -1.
[^] # Re: Et pour Caml ?
Posté par chl (site web personnel) . Évalué à 10.
[^] # Re: Et pour Caml ?
Posté par Christophe Roland (site web personnel) . Évalué à -3.
[^] # Re: Et pour Caml ?
Posté par ナイコ (site web personnel) . Évalué à 5.
[^] # Re: Et pour Caml ?
Posté par davux (site web personnel) . Évalué à 2.
[^] # Re: Et pour Caml ?
Posté par Nicolas Dumoulin (site web personnel) . Évalué à 2.
# Lent ...
Posté par Mimoza . Évalué à 1.
Ca parait quand même enorme comme différence de preformance, même avec l'interpreteur JIT je ne sais pas si ils arriveront a rattraper un tel retard ... cela ne seras t il pas un frein a son adoption ?
[^] # Re: Lent ...
Posté par manatlan (site web personnel) . Évalué à 4.
Il y a qques temps pypy était 20x plus lent que cpython ...
Mais si tu peut generer du C (et donc du binaire après coup) à partir d'un source python ... comme c'est un peu décrit ici :
http://programming.reddit.com/info/152lr/comments/c156v0
Et obtenir des performances 70 à 100x supérieur à cpython, le jeu en vaut la chandelle.
[^] # Re: Lent ...
Posté par Joc M . Évalué à 3.
C'est fou ce qu'on peut s'embrouiller avec tout ça.
[^] # Re: Lent ...
Posté par Victor STINNER (site web personnel) . Évalué à 2.
Le problème des performances va peu à peu s'effacer et je pense qu'à terme PyPy sera plus rapide.
[^] # Re: Lent ...
Posté par Bastoon . Évalué à 1.
[^] # Re: Lent ...
Posté par xumelc . Évalué à 1.
2- pypy est pour l'instant lancé avec cpython, donc il est forcément plus lent :)
(corrigez moi si je me trompe, pour le 2- :)
[^] # Re: Lent ...
Posté par Victor STINNER (site web personnel) . Évalué à 3.
Non, c'était justement quand PyPy était interprété par CPython qu'il était plusieurs centaines de fois plus lent. Maintenant PyPy est traduit en C puis compilé par gcc pour arriver à être "à peine" 3x plus lent que CPython. La page suivante présente les perfs selon le mode de compilation (C, LLVM, etc.) :
http://tuatara.cs.uni-duesseldorf.de/benchmark.html
PyPy .NET est 70x plus lent que CPython :-p
# What's in a name
Posté par Gohar . Évalué à -2.
[^] # Re: What's in a name
Posté par Encolpe DEGOUTE (site web personnel) . Évalué à 3.
# Question de profane total
Posté par Nikoo . Évalué à 2.
ceci servirait notamment à convertir un code d'un langage en un autre.
Existe-t-il un programme qui pourrait convertir tous ces langages de programmation (C, python, etc...) en assembleur (le langage, finalement dit le plus proche de la machine ?).
Juste une question candide.
Ne vous déchaînez pas sur moi :)
[^] # Re: Question de profane total
Posté par dinomasque . Évalué à 10.
BeOS le faisait il y a 20 ans !
[^] # Re: Question de profane total
Posté par Nikoo . Évalué à 4.
Mais alors dans ce cas, quel est l'intérêt de programmer directement en assembleur ?
[^] # Re: Question de profane total
Posté par Bastoon . Évalué à 4.
Parfois le compilateur n'arrive pas à optimiser le code assembleur de la même façon qu'un humain l'aurais produit. La programmation en assembleur a aussi existé avant l'arrivée des compilateurs. On remarquera que les erreurs sont vites arrivées et que la maintenance du code est quasi-nulle ...
Après l'intérêt peut-être pédagogique... ou pour développer des compilateurs (bien qu'ils soient souvent développés dans un autre langage plus haut niveau).
[^] # Re: Question de profane total
Posté par TheBreton . Évalué à 6.
-Le micro passe 80% de sont temps dans 20% du code
c'est généralement vrai, donc l'optimisation ultime est d'identifier les 20% de code et de ré-écrire ces 20% en assembleur permet d'obtenir des resultats bluffants (j'ai deja vu des 400% de gains de temps de traitement).Il est tres simple d'interfacer l'assembleur avec le C (mais il faut s'astreindre à une version particulière de compilateur pour ne pas avoir de surprise).
Le langage C est tres proche du materiel, avec une bonne habitude de ton compilateur tu peut prevoir comment il traduira en assembleur ce que tu est en train d'ecrire et produire un code avec une bonne optimisation de base.
[^] # Re: Question de profane total
Posté par Nikoo . Évalué à 2.
http://www.menuetos.net/
[^] # Re: Question de profane total
Posté par imalip . Évalué à 2.
Genre un bootloader sur TigerSharc qui tient en 256 instructions max et doit finir par lancer un DMA pour se remplacer par le vrai executable puis enchainer par un branch a l'adresse qui va bien.
# Impossible?
Posté par Gilles G. . Évalué à 0.
Par ailleurs, cela fait quelques temps que Python et Scipy/Numpy est utilisable pour faire de la simulation numérique. À présent, on peut espérer voir un interpréteur Python optimisé pour le calcul massivement parallèle, ou encore avec des déclarations de type évoluées.
Python est de plus en plus prometteur, et ça faire plaisir de voir de l'argent européen investit dans un tel projet.
En résumé: Python, c'est bon!
[^] # Re: Impossible?
Posté par abramov_MS . Évalué à 2.
[^] # Re: Impossible?
Posté par Gilles G. . Évalué à 2.
Tu veux dire que les extensions en C ne seront pas utilisable avec un interpréteur PyPy construit en C par PyPy lui-même? Pourquoi est-ce que du C ne serait pas compatible avec du C?
Je m'emmèle peut-être les pinceaux, mais moi ce que j'ai compris c'est que PyPy permet de fabriquer le code C d'un interpréteur Python lui même très rapide pour l'interprétation du code Python. Après, les extensions en C, ben ça reste du C.
A la fin, un interpréteur Python, c'est capable d'utiliser des modules C ou Fortran, ou autre. C'est justement la force de Python. Je vois pas pourquoi ils s'en passeraient.
[^] # Re: Impossible?
Posté par abramov_MS . Évalué à 2.
[^] # Re: Impossible?
Posté par Troy McClure (site web personnel) . Évalué à 3.
[^] # Re: Impossible?
Posté par パパフラクス . Évalué à 2.
ce qui est le plus prometteur c'est le JIT, car ça permet de compiler le code en effectuant des optimisation que l'on ne peux pas faire avec les langages compilés classiques (qui génère du code objet).
Comme par exemple de compiler avec des optimisation spécifique à la machine et à l'OS, ou la prévision des branchements, en utilisant des infos disponible à l'exécution.
[^] # Re: Impossible?
Posté par M . Évalué à 4.
Gnome est lent, ils auraient du coder en assembleur :)
Plus serieusement, plus le langage est bas niveau, plus il est possible de faire un truc hyper performant ou un truc mega lent (si on loupe des optimisations qu'un compilo aurait vu).
De la même façon, nous apprenons (et vérifions) que les langages interprétés sont généralement plus lents que les langages compilés.
Avec la compilation JIT, les langages interprétés doivent pouvoir etre plus rapide que leur equivalent compilé dans certains cas.
Voir par exemple un scaler compilé en JIT, plus rapide que son equivalent C compilé statiquement : http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/42975
[^] # Re: Impossible?
Posté par Victor STINNER (site web personnel) . Évalué à 1.
Hum, je pense que ce n'est sûrement pas vrai dans tous les cas. Je pense plutôt qu'étant donné qu'un programme Python est bien plus court (en nombre de lignes), on peut passer plus de temps à réécrire l'algorithme / faire des tests.
# Ca c'est une révolution
Posté par eastwind☯ . Évalué à -5.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.