Une question souvent entendue est la suivante : Python est-il un langage interprété ? Est-ce que ça va compiler ? Il n’est pas aussi facile de répondre à cette question qu’on l’imagine. Comme beaucoup de personnes qui comprennent le monde, ils ont l’habitude de juger certaines choses sur la base d’un modèle simple. En fait, il contient de très nombreux détails.
En termes généraux, la compilation signifie convertir un langage de haut niveau en code machine pouvant être exécuté par le CPU. Lorsque vous compilez du C, c'est exactement ce que vous faites. Le résultat de la compilation est un fichier exécutable binaire et votre système peut exécuter ce programme directement.
En revanche, l'explication signifie ceci : lorsque le programme est en cours d'exécution, il lit à chaque fois une ligne de code dans le fichier source, et effectue l'opération correspondante, et répète cette ligne par ligne. Bien sûr, c’est ainsi que fonctionnent les langages dits de script.
Mais en fait, la définition ci-dessus a trop de limites. Un vrai langage adopte généralement diverses méthodes d’implémentation afin d’avoir des fonctionnalités plus utiles et puissantes. Nous pouvons comprendre la compilation comme plus générale : convertir une langue en une autre forme de langue. De manière générale, le langage source est plus avancé que le langage cible, comme la conversion du C en code machine. Bien entendu, la conversion de JavaScript 8 vers JavaScript 5 est aussi une sorte de compilation.
En Python, le code source est compilé sous une forme de niveau inférieur, que nous appelons bytecode . Le bytecode est une séquence d'instructions, similaire au jeu d'instructions d'un processeur. Mais le bytecode n’est pas exécuté directement par le CPU, mais dans la machine virtuelle. Bien entendu, la machine virtuelle ici n'imite pas l'intégralité de l'environnement du système d'exploitation, mais fournit uniquement un environnement pour l'exécution du bytecode.
Regardons un petit morceau de code en Python et son bytecode correspondant
Après avoir lu le contenu du bytecode, nous savons que f' .. .' Le principe de fonctionnement de ce format de chaîne formatée est de convertir la chaîne à l'intérieur en une série de chaînes littérales et de variables, puis de les connecter à l'aide du signe +.
dis est le module de désassemblage de la bibliothèque standard Python, qui peut afficher les informations de bytecode du code Python. La machine virtuelle qui exécute le bytecode mentionné ci-dessus peut être implémentée dans n'importe quel langage, y compris Python lui-même. Si vous êtes intéressé, vous pouvez consulter ce projet nedbat/byterun sur GitHub. Ce projet peut être utilisé à des fins d'apprentissage, mais n'est pas adapté aux environnements de production.
Cependant, lorsque nous exécutons Python, nous ne ressentons pas du tout son processus de compilation. Il n'y a aucun affichage du nom du compilateur. Nous exécutons simplement le fichier .py et la compilation est automatiquement compilée en cas de besoin. Ceci est différent de JAVA Chaque fois que vous écrivez du code JAVA et que vous souhaitez l'exécuter, vous devez le compiler manuellement dans un fichier .class, puis l'exécuter. C’est pour cette raison que JAVA est appelé langage compilé et Python est appelé langage interprété. Mais en fait, les deux langages sont d'abord compilés en bytecode lors de leur exécution, puis transmis à la machine virtuelle pour exécution.
Python possède également une fonctionnalité importante, qui est la ligne de commande interactive. Vous pouvez taper une ligne d'instruction Python et appuyer immédiatement sur Entrée pour l'exécuter. En fait, même dans ce processus, Python est d’abord converti en bytecode puis exécuté. Cette fonctionnalité de ligne de commande interactive n'est pas disponible dans de nombreux langages compilés. De plus, comme il n'y a pas d'appel explicite au compilateur, de nombreuses personnes appellent le programme qui exécute les fichiers source Python un interpréteur Python.
Même si c'est relativement simple, je souhaite quand même l'ajouter. Certains langages compilés comme C ou JAVA disposent également de lignes de commande interactives, mais celles-ci ne sont pas l'objet de ces langages. JAVA a d'abord été compilé en bytecode puis exécuté plus tard, grâce à la technologie de compilation juste à temps (JIT), il peut être directement compilé en code machine, similaire au C.
Comme le montre la description ci-dessus, l'interprétation et la compilation ne peuvent pas être complètement séparées. Souvent, nous souhaitons utiliser certains mots pour classer les langages de programmation existants, mais en fait, c'est trop difficile à faire.
La dernière chose à noter est que la façon dont votre code est exécuté n'est qu'une question d'implémentation du langage, pas une fonctionnalité du langage. Ci-dessus, nous parlons de Python, mais il s'agit en fait d'une description de CPython. CPython est un interpréteur, ainsi appelé parce qu'il est écrit en C, qui est également l'interpréteur par défaut pour Python. Bien sûr, il existe de nombreux autres interprètes. Par exemple, PyPy est un autre interpréteur qui utilise la technologie JIT et sa vitesse d'exécution est grandement améliorée par rapport à CPython.
Retour à la question du titre, la raison pour laquelle Python est appelé un langage interprété est qu'il n'appelle pas explicitement l'opération de compilation et montre des caractéristiques plus interprétées. Mais en fait, la compilation existe. La manière de la compiler dépend de l'implémentation du langage, c'est-à-dire de la conception de l'interpréteur.
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!