PyPy
Un article de Haypo.
Retour aux langages de programmation
PyPy est à la fois :
- Une révolution pour Python
- Un interpréteur Python
- Un compilateur pour Python
- Un gros projet expérimental que personne n'utilise ni ne comprend à quoi il sert :-)
PyPy est un projet fédérateur : il va fusionner plusieurs projets tels que Jython, IronPython, Stackless Python. Ce qui est déjà fait : les fonctionnalités les plus intéressantes de Stackless Python se retrouvent dans PyPy (uthread, détaillé plus loin, si j'ai bien compris).
PyPy est programmé en Python. On peut l'exécuter dans CPython, mais il peut se compiler lui-même en langage natif (code machine).
=> Voir le site internet de PyPy
Sommaire |
[modifier] Interpréteur
PyPy permet d'exécuter du code Python. Étant codé en Python, il a fallu recoder la bibliothèque standard de Python en Python (l'implémentation de référence de Python est codée en langage C).
Il existe déjà d'autres interpréteurs que CPython :
- IronPython qui tourne dans .NET/Mono (codé en C# ?)
- Stackless, destiné aux architectures ayant peu de mémoire si j'ai bien compris
- Jython codé en Java (pas très maintenu, PyPy va le remplacer)
[modifier] Vitesse
Au début, PyPy était 10.000 fois plus lent que CPython... ouais, quand même :-) Mais il faut savoir qu'il tournait DANS CPython, alors forcément il était plus lent que lui ! Depuis la version 0.7, il sait se compiler lui-même en langage natif (code machine). Il n'a donc plus besoin de CPython.
Pour tester la vitesse de l'interpréteur, il existe le programme pystone. Il était programmé en C, mais a été réécrit en Python.
PyPy va intégrer un compilation « JIT », c'est à dire qu'il compile à la volée une portion de code (fonction?) en langage natif.
[modifier] Backends
PyPy peut traduire du code Python dans un autre langage, on appelle cette autre langage un backends. Les backends actuels sont :
- LLVM
- CLI (.NET)
- C
En développement :
[modifier] RPython
RPython est une variante du langage Python, qui est plus restreinte. Il est traduisible dans d'autres langages.
Questions que je me pose :
- Peut-on facilement passer du Python au RPython ?
- Est-ce PyPy sait traduire du Python (et non RPython) dans un autre langage ?
Possibilité d'annoter une variable avec par exemple un type.
[modifier] Divers
thunk: Le principe de ce mot clé est de reporter l'évaluation d'une expression à plus tard. On croit avoir le résultat, alors qu'il ne sera calculé que lorsqu'il est utilisé. Pour d'informations dans la documentation de PyPy. become permet de surveiller la modification d'une variable.
Il sera possible de faire de la programmation par contrat (pré- et post-condition).
PyPy permet de faire de la programmation fonctionnelle : plus d'informations dans la documentation. Exemple d'utilisation de uthread : producerconsumer.py (une fonction est bloquée jusqu'à ce qu'une variable soit assignée).
Il y a un outil d'analyse de flux (analyse le fonctionnement du programme durant son exécution) pour des optimisations fines.
Un autre frontend existe : Prolog.

