267 votes

Est Python interprété ou compilé ou les deux?

De ma compréhension :

Interprété : Un niveau élevé de l'exécution de langue et exécuté par un Interprète(un programme qui convertit le langage de haut niveau en code machine et l'exécution); Il traite le programme un peu à la fois.

Compilé : Un langage de haut niveau, dont le code est d'abord converti en code machine par un compilateur(une programmation qui convertit le langage de haut niveau en code machine), puis exécuté par l'Exécuteur testamentaire(un autre programme pour l'exécution du code).

Corrigez-moi, si mes définitions sont fausses

Maintenant, pour en revenir à python, je suis un peu confus à ce sujet. Chaque endroit où vous pouvez apprendre ce que python est un langage interprété, mais il n'est pas interprété de la machine code, à la place de certains intermédiaires code(comme le byte-code ou IL). Donc le programme qui exécute l'IM code. S'il vous plaît aidez-moi à comprendre comment agit d'un script python manipulés et exécuter.

324voto

delnan Points 52260

Tout d'abord, interprété/compilé n'est pas une propriété de la langue, mais une propriété de la mise en œuvre. Pour la plupart des langues, la plupart, si pas tous les implémentations de la chute dans une catégorie, donc on pourrait économiser quelques mots en disant que la langue est interprété/compilé trop, mais c'est toujours une distinction importante, à la fois parce qu'elle permet de comprendre et parce qu'il y a assez peu de langues utilisable implémentations de ces deux types (surtout dans le domaine des langages fonctionnels, voir Haskell et ML). En outre, il existe C interprètes et des projets qui tentent de compiler un sous-ensemble de Python pour le code C ou C++ (et par la suite en code machine).

Deuxièmement, la compilation n'est pas restreint à l'avance sur le temps de compilation du code machine natif. Un compilateur est, plus généralement, un programme qui convertit un programme dans un langage de programmation dans un programme dans un autre langage de programmation (sans doute, vous pouvez même avoir un compilateur avec la même entrée et de sortie de la langue si d'importantes transformations sont appliquées). Et compilateurs JIT compiler en code machine natif au moment de l'exécution, ce qui peut donner de la vitesse très proche ou même mieux que (en fonction de l'indice de référence et la qualité de la mise en œuvre par rapport) à l'avance du temps de compilation.

Mais pour arrêter coupant les cheveux en quatre et de répondre à la question que tu voulais dire: Pratiquement (lire: à l'aide d'un peu populaire et de la maturité de la mise en œuvre), le Python est compilé. Pas compilé en code machine à l'avance (c'est à dire "compilé" par le limité et le mal, mais hélas définition commune), "seulement" compilé vers du bytecode, mais c'est toujours de la compilation avec au moins certains des avantages. Par exemple, l'instruction a = b.c() est compilé en un flux d'octets qui, lors de la "démonté", ressemble load 0 (b); load_str 'c'; get_attr; call_function 0; store 1 (a). C'est une simplification, c'est en fait de moins en moins lisible et un peu plus bas-niveau, vous pouvez expérimenter avec la bibliothèque standard dis module et voir ce que la vraie affaire ressemble. L'interprétation de ce est plus rapide que l'interprétation d'un plus haut niveau de représentation.

Que le bytecode est soit interprété (à noter qu'il y a une différence, à la fois dans la théorie et dans la pratique de la performance, entre l'interprétation directement et première compilation de certains intermédiaires de la représentation et de l'interpréter), comme avec l'implémentation de référence (Disponible), ou les deux, interprété et compilé à l'optimisation de code machine au moment de l'exécution, comme avec PyPy.

59voto

Jeremy Points 1258

Le CPU ne peut comprendre le code machine, en effet. Pour le programme interprété, le but ultime d'un interprète est "d'interpréter" le code du programme en code machine. Pourtant, d'habitude, un moderne langage interprété de ne pas interpréter de l'homme code directement, car elle est trop inefficace.

L'interpréteur Python de lire d'abord l'homme de code et l'optimiser un code avant de l'interpréter en code machine. C'est pourquoi vous avez toujours besoin d'un autre programme pour exécuter un script Python, contrairement au C++, vous pouvez exécuter le fichier exécutable directement. Par exemple c:\Python27\python.exe ou /usr/bin/python.

2voto

Hemant Points 31

Presque, nous pouvons dire que Python est interprété de la langue. Mais nous sommes en utilisant une partie d'un temps processus de compilation en python pour convertir le code source complet en byte-code comme langage java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X