VM Python

Un article de Haypo.

(Différences entre les versions)
Version du 17 juillet 2012 à 21:32 (modifier)
Haypo (Discuter | Contributions)
(VM)
← Différence précédente
Version actuelle (23 mai 2014 à 22:20) (modifier) (défaire)
Haypo (Discuter | Contributions)
(JIT)
 
(11 révisions intermédiaires masquées)
Ligne 14 : Ligne 14 :
* [http://www.stackless.com/ Stackless Python] * [http://www.stackless.com/ Stackless Python]
* [http://code.google.com/p/hotpy/ Hotpy] et [https://bitbucket.org/markshannon/hotpy_2 Hotpy 2]: built using the [http://code.google.com/p/gvmt/ GVMT] (The Glasgow Virtual Machine Toolkit) * [http://code.google.com/p/hotpy/ Hotpy] et [https://bitbucket.org/markshannon/hotpy_2 Hotpy 2]: built using the [http://code.google.com/p/gvmt/ GVMT] (The Glasgow Virtual Machine Toolkit)
 +* [http://code.google.com/p/python-on-a-chip/ python-on-a-chip] : a reduced Python virtual machine (codenamed PyMite) that runs a significant subset of the Python language on microcontrollers without an OS
 +
 +Voir aussi :
 +
 +* [https://bitbucket.org/allison/pynie pynie] : Python sur [http://www.parrotcode.org/ Parrot]
== JIT == == JIT ==
* [https://github.com/numba/numba Numba] * [https://github.com/numba/numba Numba]
-* [http://code.google.com/p/pymothoa/ pymothoa] utilise LLVM; "don't support classes nor exceptions."+* [http://code.google.com/p/pymothoa/ pymothoa] utilise LLVM; "don't support classes nor exceptions." => le projet a fusionné dans Numba
* [http://code.google.com/p/unladen-swallow/ Unladen Swallow]: fork de CPython 2.6 utilisant LLVM, n'est plus maintenu. Lire [http://qinsb.blogspot.com.au/2011/03/unladen-swallow-retrospective.html Unladen Swallow Retrospective] et la [http://python.org/dev/peps/pep-3146/ PEP 3146]. * [http://code.google.com/p/unladen-swallow/ Unladen Swallow]: fork de CPython 2.6 utilisant LLVM, n'est plus maintenu. Lire [http://qinsb.blogspot.com.au/2011/03/unladen-swallow-retrospective.html Unladen Swallow Retrospective] et la [http://python.org/dev/peps/pep-3146/ PEP 3146].
* [http://psyco.sourceforge.net/ psyco]: n'est plus maintenu. * [http://psyco.sourceforge.net/ psyco]: n'est plus maintenu.
Voir aussi : Voir aussi :
 +* [http://code.google.com/p/wpython/ WPython]: 16-bit word-codes instead of byte-codes
 +* [http://www.skulpt.org/ Skulpt]: Javascript implementation (incomplet, ex: pas d'exception)
 +* [http://kenai.com/projects/hope HoPe]: Python in Haskell
 +* [https://github.com/bjpop/berp/wiki/ Berp] : Python in Haskell
-* [http://www.parrotcode.org/ Parrot] : Machine virtuelle en développement qui sera utilisée pour exécuter du Perl6 ou Python+== Sous-ensemble de Python ==
-== Compiler un sous-ensemble de Python en C ou C++ ==+=== Compiler en C++ ou C ===
-* [[Cpp|C++]] : [http://code.google.com/p/shedskin/ Shedskin] (voir aussi le [http://shed-skin.blogspot.com/ blog de son auteur])+* [http://code.google.com/p/shedskin/ Shedskin] : Python vers [[Cpp|C++]] (voir aussi le [http://shed-skin.blogspot.com/ blog de son auteur])
-* [[Cpp|C++]] : [http://www.strout.net/python/ai/ Python2C], petit script très limité qui vise à convertir un script Python en C+++* [http://www.nuitka.net/pages/overview.html Nuitka] : Python vers [[Cpp|C++]] (voir la [https://ep2012.europython.eu/conference/talks/nuitka-the-python-compiler conférence à EuroPython 2012])
-* [[Cpp|C++]] : [http://www.nuitka.net/pages/overview.html Nuitka] (voir la [https://ep2012.europython.eu/conference/talks/nuitka-the-python-compiler conférence à EuroPython 2012])+* [https://github.com/serge-sans-paille/pythran pythran] : Python vers [[Cpp|C++]] (voir aussi le [http://linuxfr.org/users/serge_ss_paille/journaux/pythran-python-c#comment-1367069 journal linuxfr])
-* [[Cpp|C++]] : [https://github.com/serge-sans-paille/pythran pythran] (voir aussi le [http://linuxfr.org/users/serge_ss_paille/journaux/pythran-python-c#comment-1367069 journal linuxfr])+* [http://code.google.com/p/unpython/ unpython] : Python vers [[C]]
-* [[C]] : [http://code.google.com/p/unpython/ unpython]+* [http://www.strout.net/python/ai/ Python2C], petit script très limité qui vise à convertir un script Python en C++
 +* [http://sourceforge.net/projects/py2cmod/ py2cmod] : Outil permettant de convertir un module Python en code C, ce qui permet de créer des versions plus performante
-== pseudo-Python ==+=== Autres ===
-* [http://copperhead.github.com/ Copperhead] : Python vers GPU (Nvidia) 
* [http://code.google.com/p/numexpr/ numexpr] : "The numexpr package evaluates multiple-operator array expressions many times faster than NumPy can." * [http://code.google.com/p/numexpr/ numexpr] : "The numexpr package evaluates multiple-operator array expressions many times faster than NumPy can."
 +* [http://copperhead.github.com/ Copperhead] : Python vers GPU (Nvidia)
 +* [http://perthon.sourceforge.net/ Perthon] : Python vers [[Perl]]
-== Compiler Python en un binaire (Windows / Unix) ==+== Pseudo-Python vers C ==
-Il est possible de compiler un script Python pour produire un programme binaire.+* [http://www.cython.org/ Cython] "Cython is a programming language based on Python, with extra syntax allowing for optional static type declarations.". Cython est basé sur [http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/ pyrex].
-* Créer un binaire Windows (PE)+
-** [http://www.py2exe.org/ Py2exe]+
-** [http://starship.python.net/crew/atuining/cx_Freeze/ cx_Freeze]+
-* Créer un binaire Unix (ELF)+
-** [http://wiki.python.org/moin/Freeze freeze.py] : Inclut dans Python apparement (?)+
-== Autres ==+== Inclure du code C et C++ dans Python ==
-* [http://copperhead.github.com/ copperhead]: GPU+* [http://pyinline.sourceforge.net/ PyInline] permet d'ajouter du code source dans un autre langage directement dans un programme C, et de manière transparente.
-* [[Perl]] : [http://perthon.sourceforge.net/ Perthon]+* [http://www.scipy.org/documentation/weave/ weave] : outil permettant d'inclure du code C/C++ dans du code Python
== Optimiser Python == == Optimiser Python ==
-Outils ou articles traitant de l'optimisation de Python :+[http://www.python.org/doc/essays/list2str.html list2str] : Petit histoire sur l'optimisation (en Python uniquement) d'une fonction très simple expliquant pourquoi ça va plus vite d'une version à l'autre de la fonction.
-* [http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/ pyrex] : Compilateur permettant de mélanger du code C et du code Python si j'ai bien compris (?)+ 
-* [http://psyco.sourceforge.net/ psyco] : Module C (pour architecture i386) qui fonctionne comme un compilateur JIT (Just In Time : compile durant l'exécution du programme). Apparement, l'empreinte mémoire est assez grosse dans la version actuelle mais les performances sont bonnes sans avoir à retoucher à son programme Python.+== Compiler Python en un binaire (Windows / Unix) ==
-* [http://pyinline.sourceforge.net/ PyInline] permet d'ajouter du code source dans un autre langage directement dans un programme C, et de manière transparente.+ 
-* [http://www.python.org/doc/essays/list2str.html list2str] : Petit histoire sur l'optimisation (en Python uniquement) d'une fonction très simple expliquant pourquoi ça va plus vite d'une version à l'autre de la fonction.+Pour distribuer plus facilement Python, il est possible de combiner l'interprète CPython et le bytecode du projet dans un seul programme binaire.
-* [http://sourceforge.net/projects/py2cmod/ py2cmod] : Outil permettant de convertir un module Python en code C, ce qui permet de créer des versions plus performante+ 
-* [http://www.scipy.org/documentation/weave/ weave] : outil permettant d'inclure du code C/C++ dans du code Python+Binaire Windows (PE) :
 +* [http://www.py2exe.org/ Py2exe]
 +* [http://starship.python.net/crew/atuining/cx_Freeze/ cx_Freeze]
 + 
 +Binaire Unix (ELF)
 +* [http://wiki.python.org/moin/Freeze freeze.py] : Inclut dans Python apparement (?)
== Articles connexes == == Articles connexes ==
* '''[[Python]]''' — '''[[FAQ Python]]''' — '''[[Python graphique]]''' — '''[[Installer des modules Python]]''' — '''[[Python ou rien]]''' — [[pypy]] * '''[[Python]]''' — '''[[FAQ Python]]''' — '''[[Python graphique]]''' — '''[[Installer des modules Python]]''' — '''[[Python ou rien]]''' — [[pypy]]

Version actuelle

Retour à la page précédente Retour à Python

Python est un langage. On peut compiler du Python pour donner du code machine i386, mais on peut aussi en faire du bytecode Java, ou plus couramment du bytecode pour la machine virtuelle CPython (l'interpréteur le plus connu).

Sommaire

[modifier] VM

Voici donc une liste de machines virtuelles permettant d'exécuter du Python :

  • pypy : Implémentation de Python codée en Python qui se veut aussi rapide que l'implémentation en C, voir même plus en utilisant une analyse dynamique du code ...
  • Jython : Exécution dans une Java Virtual Machine (JVM, voir Java). Voir aussi le projet Jpype qui permet d'utiliser du Java dans Python.
  • IronPython : Dans une plateforme .NET avec intégration du Common Language Runtime (CLR)
  • Stackless Python
  • Hotpy et Hotpy 2: built using the GVMT (The Glasgow Virtual Machine Toolkit)
  • python-on-a-chip : a reduced Python virtual machine (codenamed PyMite) that runs a significant subset of the Python language on microcontrollers without an OS

Voir aussi :

[modifier] JIT

Voir aussi :

  • WPython: 16-bit word-codes instead of byte-codes
  • Skulpt: Javascript implementation (incomplet, ex: pas d'exception)
  • HoPe: Python in Haskell
  • Berp : Python in Haskell

[modifier] Sous-ensemble de Python

[modifier] Compiler en C++ ou C

[modifier] Autres

  • numexpr : "The numexpr package evaluates multiple-operator array expressions many times faster than NumPy can."
  • Copperhead : Python vers GPU (Nvidia)
  • Perthon : Python vers Perl

[modifier] Pseudo-Python vers C

  • Cython "Cython is a programming language based on Python, with extra syntax allowing for optional static type declarations.". Cython est basé sur pyrex.

[modifier] Inclure du code C et C++ dans Python

  • PyInline permet d'ajouter du code source dans un autre langage directement dans un programme C, et de manière transparente.
  • weave : outil permettant d'inclure du code C/C++ dans du code Python

[modifier] Optimiser Python

list2str : Petit histoire sur l'optimisation (en Python uniquement) d'une fonction très simple expliquant pourquoi ça va plus vite d'une version à l'autre de la fonction.

[modifier] Compiler Python en un binaire (Windows / Unix)

Pour distribuer plus facilement Python, il est possible de combiner l'interprète CPython et le bytecode du projet dans un seul programme binaire.

Binaire Windows (PE) :

Binaire Unix (ELF)

  • freeze.py : Inclut dans Python apparement (?)

[modifier] Articles connexes