PyPy : l'interprète Python écrit en Python

manneken_pis2.jpg

Victor Stinner - Ptycon 2008

C'est quoi PyPy ?

  • Interprète Python écrit en Python
  • 100% compatible Python 2.4
  • Permet d'expérimenter des technologies
  • Applications réelles 1,5 à 3x plus lente

Motivation du projet

  • Étendre l'implémentation de Python
  • Améliorer les performances
  • Ajouter de l'expressivité
  • Faciliter le portage

Faire évoluer CPython ?

  • Portabilité de code C
  • psyco et stackless difficiles à maintenir
  • Choix difficiles à changer (compteur de référence)

Interprète Python

  • Langage interprété :
  • Script Python (.py) compilé en bytecode (.pyc)
  • Traduit en code machine par l'interprète

Projet fédérateur

  • Jython
  • IronPython
  • Stackless
  • psyco

Langage RPython

  • Noyau de PyPy écrit en RPython
  • Sous-ensemble de Python
  • Beaucoup de contraintes

Évaluation paresseuse

$ pypy -o thunk
>>> def f():
...    print 'computing...'
...    return 6*7
...
>>> from __pypy__ import thunk

Évaluation paresseuse (suite)

(...)
>>> x = thunk(f)
>>> x
computing...
42
>>> x
42

Proxy transparent

  • Observer les opérations faites sur un objet
  • Remplacer les opération faites sur un objet
  • Transparence réseau

Coroutines de Stackless

  • Chaque fonction est une coroutine
  • Tasklet et channel
  • Sérialiser une coroutine
  • Cloner une coroutine

Optimisations

  • Inlining des fonctions
  • Suppression d'allocations mémoires
  • Structures typées

Expérimentations

  • Ramasse-miettes
  • Nombre entier (int)
  • Chaîne de caractères (str)

Backends PyPy

  • Avancés : C et LLVM
  • Actifs : et JVM
  • Expérimentaux : Javascript et Squeak

Compilation à la volée (JIT)

  • En cours de développement
  • Performances similaires à psyco
  • Portage plus simple que psyco

Bac à sable

  • Environnement isolé pour exécuter du code
  • Isolement des appels aux fonctions externes
  • Pas de segfault possible

Modules externes

  • Nombreux modules écrits avec API C Python
  • Modules à réécrire avec ctypes

Divers

  • Projets abandonné : programmation logique
  • PyPy est publié sous licence MIT
  • Projet développé sous forme de sprints

Questions ?

Cette présentation

  • Photo du Manneken Pis de flickr.com sous licence Creative Commons
  • Thème dessiné par Olivier Grisel