Première version | |
---|---|
Dernière version | 7.3.17 ()[1] |
Dépôt | github.com/pypy/pypy |
Écrit en | Python et RPython (en) |
Système d'exploitation | Multiplateforme |
Environnement | Multi-plateforme |
Type |
Interpréteur et compilateur Python |
Licence | Licence MIT |
Site web | pypy.org |
PyPy est une mise en œuvre du langage Python écrite elle-même en Python, avec une architecture flexible.
Un des buts du projet est d'obtenir une version de Python plus rapide que l'implémentation en C actuelle (CPython)[2], ce but est atteint depuis 2000[Quoi ?] avec la version 1.2[3].
PyPy est principalement un projet de recherche et développement et ne se focalise pas en lui-même sur l'obtention d'une implémentation de Python prête pour la production, pour le moment.
Un des développeurs principaux de PyPy est Armin Rigo, qui a développé Psyco (en), un compilateur à la volée spécialisé pour Python qui accélère le code Python de 4 à 100 fois presque sans intervention de l'utilisateur.
PyPy s'inspire du langage Oz pour l'utilisation d'espace d'objets. Cela permet de combiner les aspects orientation objet et mutabilité, concurrence et distribution, etc. dans le même langage.
PyPy est constitué de deux composants principaux :
Ces deux composants peuvent être utilisés indépendamment : l'interpréteur Python peut lui-même s'exécuter au sein d'un autre interpréteur Python existant, et la chaîne de traduction peut s'appliquer à tout programme écrit en RPython.
L'interpréteur Python de PyPy, tel que proposé par la version 2.2, est semblable à une version Python 2.7.3.
PyPy s'approche le plus possible de l'interpréteur standard, avec quelques différences[4] :
L'interpréteur Pypy est écrit dans une version restreinte de Python appelée RPython (R pour « restreint »)[5]. Il se définit à partir du langage Python, en deux phases successives :
Les contraintes principales des objets analysés sont :
Parce qu'il est écrit dans un langage dynamique, PyPy facilite la séparation des différents aspects d'un interpréteur, et permet l'identification des zones où l'implémentation de Python peut être améliorée. Il permet également aux développeurs d'expérimenter de multiples implémentations de fonctions spécifiques.
Pour la gestion de la mémoire, effectuée par un ramasse-miettes, on a le choix entre trois sous-systèmes différents :
La traduction de l'interpréteur PyPy écrit en RPython peut se faire dans différents langages :