« Le bytecode Python » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 2 : | Ligne 2 : | ||
<strong>Chercheur</strong> : HYVERNAT Pierre </br> |
<strong>Chercheur</strong> : HYVERNAT Pierre </br> |
||
<h1>Introduction |
<h1>Introduction </h1> |
||
Python est un langage de programmation multiparadigme (à la fois impératif, fonctionnel et orienté objet) créé en 1991. A la difference des langages compilés comme le C, le C++ ou le Rust, le python lui est un langage interprété (nous verrons la différence juste après). Il a la particularité dans son execution, de transformer le code en un code intermédiaire simplifié appelé Bytecode. Ce projet porte sur l'étude du fonctionnement d'un interprèteur python, et plus particulièrement du Bytecode. |
Python est un langage de programmation multiparadigme (à la fois impératif, fonctionnel et orienté objet) créé en 1991. A la difference des langages compilés comme le C, le C++ ou le Rust, le python lui est un langage interprété (nous verrons la différence juste après). Il a la particularité dans son execution, de transformer le code en un code intermédiaire simplifié appelé Bytecode. Ce projet porte sur l'étude du fonctionnement d'un interprèteur python, et plus particulièrement du Bytecode. |
||
| Ligne 9 : | Ligne 9 : | ||
Un langage interprété a lui besoin d'un interpréteur (ou interprète) pour fonctionner. Il récupère un code source, le traîte, le transforme et l'execute dirrectement dans une machine virtuelle. Les langages interprétés sont donc par conséquent plus lents que les langages compilés, mais il permettent une plus grande flexibilité. La plupart des interpreteurs traîtent et executent le code instruction par instruction. Or, ce n'est pas totalement le cas de l'interprèteur python. |
Un langage interprété a lui besoin d'un interpréteur (ou interprète) pour fonctionner. Il récupère un code source, le traîte, le transforme et l'execute dirrectement dans une machine virtuelle. Les langages interprétés sont donc par conséquent plus lents que les langages compilés, mais il permettent une plus grande flexibilité. La plupart des interpreteurs traîtent et executent le code instruction par instruction. Or, ce n'est pas totalement le cas de l'interprèteur python. |
||
<h1> |
<h1>Spécificité de Python</h1> |
||
L'interpréteur python a un fonctionnement bien particulier. En effet, il est un hybride entre interprète et compilateur. </br> |
L'interpréteur python a un fonctionnement bien particulier. En effet, il est un hybride entre interprète et compilateur. </br> |
||
Le code source python est d'abord analysé syntaxiquement et cémantiquement en entiereté par un lexer et un parser (expliqué plus en détails plus bas), puis est compilé en code objet intermédiaire, le bytecode. ce bytecode est ensuite executé instruction par instruction par la machine virtuelle python. </br> |
Le code source python est d'abord analysé syntaxiquement et cémantiquement en entiereté par un lexer et un parser (expliqué plus en détails plus bas), puis est compilé en code objet intermédiaire, le bytecode. ce bytecode est ensuite executé instruction par instruction par la machine virtuelle python. </br> |
||
La syntaxe du bytecode est plutôt claire et s'apparente à de l'assembleur siplifié. Chaque instructions du code source python (affectation, calcul, definition de fonction ...) a sa propre représentation bien précise en bytecode. </br> |
La syntaxe du bytecode est plutôt claire et s'apparente à de l'assembleur siplifié. Chaque instructions du code source python (affectation, calcul, definition de fonction ...) a sa propre représentation bien précise en bytecode. </br> |
||
Voici un exemple de bytecode pour l'instruction <strong> a = 10 :</strong> </br> |
Voici un exemple de bytecode pour l'instruction <strong> a = 10 :</strong> </br> |
||
[[Fichier:Bytecode1.png]] |
[[Fichier:Bytecode1.png]] |
||
<h1>Description du projet</h1> |
|||
Dans le cadre de nos recherches sur le sujet, nous avons décidé pour comprendre comment fonctionne l'interprèteur python d'en recoder une version simplifiée. Le code que nous avons réalisé prend en entrée un code source python basique, le transforme en code intermédiaire inspiré du vrai bytecode de Python3, et l'execute dans une machine virtuelle. Nous avons donc trouvé pertinnent de découper ce projet en deux parties distinctes : la partie <strong>Compilation</strong> et la partie <strong> Machine virtuelle et execution </strong> </br> |
|||
Ce code prend en compte quelques fonctionnalités de base de python telles que : <ul><li>L'affectation de variable</li> |
|||
<li>Les opérations de base</li> |
|||
<li>La gestion des boucles</li> |
|||
<li>La gestion des conditions</li> |
|||
<li>La définition de fonctions en prenant en compte : <ul><li>Les variables locales </li><li>Les variables globales</li><li>Les clotures (ou closures)</li></li> |
|||
<li>La gestion d'une fonction built-in : print() </li></ul> </br> |
|||
Pour ce qui est du stack technique, ce projet a été entièrement développé en python, dans le paradigme de programmation orientée objet (POO). |
|||
Version du 1 mai 2026 à 17:05
Etudiants : MARZIN Simon et PERIVOLAS Baptiste
Chercheur : HYVERNAT Pierre
Introduction
Python est un langage de programmation multiparadigme (à la fois impératif, fonctionnel et orienté objet) créé en 1991. A la difference des langages compilés comme le C, le C++ ou le Rust, le python lui est un langage interprété (nous verrons la différence juste après). Il a la particularité dans son execution, de transformer le code en un code intermédiaire simplifié appelé Bytecode. Ce projet porte sur l'étude du fonctionnement d'un interprèteur python, et plus particulièrement du Bytecode.
Langage compilé VS interprété
Un langage compilé est un langage qui necessite de passer par un compilateur (un programme qui transforme un code source en un code objet) pour transformer le code de base en instructions de bas niveau proche de l'assembleur éxecutable par la machine. En C par exemple, on doit compiler un programme C pour le transformer en .exe avant de pouvoir le lancer. Le compilateur analyse syntaxiquement tout le code, puis le transforme, ce qui fait que les erreurs sont detectées plus tôt. Les langages compilés ont la particularité d'être très rapides et performants, un programme déjà compilé étant très facilement executable. Néanmoins, celà rend le débug ainsi que les test plus complexes.
Un langage interprété a lui besoin d'un interpréteur (ou interprète) pour fonctionner. Il récupère un code source, le traîte, le transforme et l'execute dirrectement dans une machine virtuelle. Les langages interprétés sont donc par conséquent plus lents que les langages compilés, mais il permettent une plus grande flexibilité. La plupart des interpreteurs traîtent et executent le code instruction par instruction. Or, ce n'est pas totalement le cas de l'interprèteur python.
Spécificité de Python
L'interpréteur python a un fonctionnement bien particulier. En effet, il est un hybride entre interprète et compilateur.
Le code source python est d'abord analysé syntaxiquement et cémantiquement en entiereté par un lexer et un parser (expliqué plus en détails plus bas), puis est compilé en code objet intermédiaire, le bytecode. ce bytecode est ensuite executé instruction par instruction par la machine virtuelle python.
La syntaxe du bytecode est plutôt claire et s'apparente à de l'assembleur siplifié. Chaque instructions du code source python (affectation, calcul, definition de fonction ...) a sa propre représentation bien précise en bytecode.
Voici un exemple de bytecode pour l'instruction a = 10 :
Description du projet
Dans le cadre de nos recherches sur le sujet, nous avons décidé pour comprendre comment fonctionne l'interprèteur python d'en recoder une version simplifiée. Le code que nous avons réalisé prend en entrée un code source python basique, le transforme en code intermédiaire inspiré du vrai bytecode de Python3, et l'execute dans une machine virtuelle. Nous avons donc trouvé pertinnent de découper ce projet en deux parties distinctes : la partie Compilation et la partie Machine virtuelle et execution
Ce code prend en compte quelques fonctionnalités de base de python telles que :
- L'affectation de variable
- Les opérations de base
- La gestion des boucles
- La gestion des conditions
- La définition de fonctions en prenant en compte :
- Les variables locales
- Les variables globales
- Les clotures (ou closures)
- La gestion d'une fonction built-in : print()
Pour ce qui est du stack technique, ce projet a été entièrement développé en python, dans le paradigme de programmation orientée objet (POO).
Partie compilation
Lexer
...
Parser
...
Arbre de syntaxe et compilation
...
Partie machine virtuelle
