Lorsque nous parlons de Python, nous ne parlons souvent pas seulement du langage mais aussi de l’implémentation. Python est en fait une spécification pour un langage qui peut être mis en œuvre de nombreuses façons différentes.
Contexte
Avant de poursuivre, comprenons la différence entre le bytecode et le code machine(code natif).
Code machine(aka code natif)
Le code machine est un ensemble d’instructions qui est directement exécuté par le CPU. Chaque instruction exécute une tâche très unique, comme le chargement ou une opération logique sur les données dans la mémoire du CPU. Presque tous les langages de haut niveau tels que le C traduisent le code source en code machine exécutable à l’aide de compilateurs, de chargeurs et d’éditeurs de liens. Chaque processeur ou famille de processeurs possède son propre jeu d’instructions de code machine.
Bytecode
Le Bytecode est également une représentation binaire exécutée par une machine virtuelle (et non par le CPU directement). La machine virtuelle (qui est écrite différemment pour différentes machines) convertit l’instruction binaire en une instruction machine spécifique. Un des langages qui utilise le concept de Bytecode est Java.
Le code machine est beaucoup plus rapide par rapport au Bytecode mais le Bytecode est portable et sécurisé par rapport au code machine.
Implémentations de Python
Cpython
L’implémentation par défaut du langage de programmation Python est Cpython. Comme son nom l’indique, Cpython est écrit en langage C. Cpython compile le code source python en bytecode intermédiaire, qui est exécuté par la machine virtuelle Cpython. CPython est distribué avec une large bibliothèque standard écrite dans un mélange de C et de Python. CPython assure le plus haut niveau de compatibilité avec les paquets Python et les modules d’extension C. Toutes les versions du langage Python sont implémentées en C car CPython est l’implémentation de référence.
Certaines des implémentations qui sont basées sur le noyau d’exécution CPython mais avec un comportement ou des fonctionnalités étendues dans certains aspects sont Stackless Python, wpython, MicroPython.
Stackless Python – CPython avec un accent sur la concurrence en utilisant des tasklets et des canaux (utilisé par dspython pour la Nintendo DS)
Autres implémentations
Il existe quelques autres implémentations du langage Python aussi Les seules implémentations connues pour être compatibles avec une version donnée du langage sont IronPython, Jython et PyPy.
Jython
Jython est une implémentation du langage de programmation Python qui peut fonctionner sur la plateforme Java. Les programmes Jython utilisent des classes Java au lieu de modules Python .Jython se compile en byte code Java, qui peut ensuite être exécuté par la machine virtuelle Java. Jython permet d’utiliser les fonctions de la bibliothèque de classes Java à partir du programme Python. Jython est lent par rapport à Cpython et manque de compatibilité avec les bibliothèques CPython.
IronPython
Une implémentation de Python écrite en C# ciblant le cadre .NET de Microsoft. Comme Jython, il utilise la machine virtuelle .Net, c’est-à-dire le Common Language Runtime. IronPython peut utiliser le cadre .NET et les bibliothèques Python, et d’autres langages .NET peuvent utiliser le code Python très efficacement. IronPython est plus performant dans les programmes Python qui utilisent des threads ou plusieurs cœurs, car il dispose d’un JIT, et aussi parce qu’il n’a pas le Global Interpreter Lock.
PyPy
« Si vous voulez que votre code s’exécute plus rapidement, vous devriez probablement simplement utiliser PyPy. » – Guido van Rossum (créateur de Python)
Python est un langage de programmation dynamique. On dit que Python est lent car l’implémentation CPython par défaut compile le code source python en bytecode qui est lent par rapport au code machine(code natif). C’est là qu’intervient PyPy.
PyPy est une implémentation du langage de programmation Python écrite en Python. L’interpréteur est écrit en RPython (un sous-ensemble de Python).
PyPy utilise (compilation juste à temps). En termes simples, JIT utilise des méthodes de compilation pour rendre le système de l’interpréteur plus efficace et rapide. Donc, fondamentalement, JIT permet de compiler le code source en code machine natif, ce qui le rend très rapide.
PyPy est également livré par défaut avec le support du mode stackless, fournissant des micro-threads pour une concurrence massive. Python est dit être environ 7,5 fois plus rapide que Cpython.
Certaines autres implémentations de Python sont CLPython, Pyston, Psyco, Cython, IPython.
Cet article est contribué par Saurabh Daalia. Si vous aimez GeeksforGeeks et que vous souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyer votre article par courrier à [email protected]. Voyez votre article apparaître sur la page principale de GeeksforGeeks et aidez d’autres Geeks.