Est Python interprété ou compilé, ou les deux?
À partir de ma compréhension:
Un interprété langage est un langage de haut niveau exécuter et exécuté par un interprète (un programme qui convertit le langage de haut niveau en code machine et l'exécution) sur la route; il traite le programme un peu à la fois.
Un compilé langage est un langage de haut niveau, dont le code est d'abord converti en code machine par un compilateur (un programme qui convertit le langage de haut niveau en code machine), puis exécuté par un exécuteur testamentaire (un autre programme pour l'exécution du code).
Corrigez-moi si mes définitions sont fausses.
Maintenant revenir à Python, je suis un peu confus à ce sujet. Partout où vous apprenez que Python est un langage interprété, mais il est interprété à certains code intermédiaire (comme le byte-code ou IL) et pas pour le code machine. Donc le programme qui exécute l'IM code? S'il vous plaît aidez-moi à comprendre comment un script Python est géré et exécuté.
- double possible de Python Est interprété (comme en Javascript ou PHP)?
- Python n'créer .pyc fichiers (soi-disant byecode) chaque fois qu'une bibliothèque est importé. Autant que je sache, le bytecode ne peut accélérer les temps de chargement, pas de temps d'exécution.
- La mise en cache du bytecode dans .pyc uniquement les fichiers de vitesses de chargement en effet, mais seulement becase le code Python est compilé en bytecode avant l'exécution de toute façon. Bien que je ne pense pas qu'il a été essayé avec Python spécifiquement, d'autres implémentations de langue montrent que le bytecode est en effet plus facile à interpréter efficacement qu'un simple AST ou, pire encore, unparsed code source. Les anciennes versions Rubis interprété à partir de l'AST, par exemple, et autant que je sache, a été surclassé tout à fait un peu par des versions plus récentes qui compile en bytecode.
- Ne veulent pas de son grossier, mais n'est pas que ce que je voulais dire (mais pas aussi informé que vous)?
- Je ne sais pas ce que tu voulais dire. Je sais seulement que votre commentaire n'était pas incorrect, mais à condition, bien oppoturnity pour quelques informations de fond pour lesquelles il ne accélère les temps de chargement, j'ai donc décidé d'ajouter cette information. N'en déplaise signifiait ou de pris 🙂
- Quant à votre définition de "Compilé:" Certains programmes ne nécessitent pas un Exécuteur testamentaire. Par exemple, les programmes C sont compilés directement en code machine, qui peut être exécuté directement.
Vous devez vous connecter pour publier un commentaire.
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ème, la compilation n'est pas réservé à 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 près, voire mieux que l'avance de temps de compilation (en fonction de l'indice de référence et la qualité de la mise en œuvre par rapport).
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é à 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 un peu à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 standarddis
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.
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.
La réponse dépend de ce que la mise en œuvre de python est utilisé. Si vous utilisez disons Disponible (L'implémentation Standard de python) ou Jython (Ciblée pour l'intégration avec java langage de programmation), c'est d'abord traduit en bytecode, et en fonction de la mise en œuvre de python que vous utilisez, ce bycode est dirigé vers la machine virtuelle correspondante pour l'interprétation. PVM (Python Machine Virtuelle) pour Disponible et JVM (Java Virtual Machine) pour Jython.
Mais disons que vous utilisez PyPy qui est un autre standard Disponible de mise en œuvre. Elle serait d'utiliser un Just-In-Time compiler.
Selon python.org il est un interprète.
https://www.python.org/doc/essays/blurb/
...
...
...
Si ( Vous savez, Java ) {
Le code Python est transformé en bytecode comme java ne.
Que le bytecode est exécutée à nouveau chaque fois que vous essayez d'y accéder.
} else {
Le code Python est d'abord traslated dans quelque chose appelé bytecode
qui est tout à fait
proche du langage machine, mais pas à proprement parler un code machine
donc, chaque fois que nous avons accès ou de l'exécuter que le bytecode est exécutée à nouveau
}
Oui, il est à la fois compilé et interprété langue. Alors pourquoi nous appelons généralement comme interprété languate?
voir comment il est à la fois compilé et interprété?
Tout d'abord je tiens à dire que vous allez aimer ma réponse plus si vous êtes dans le monde Java.
Dans le Java, le code source première est converti à l'octet de code via javac compilateur, alors dirigé vers le JVM(responsable de la génération du code natif pour l'exécution de but). Maintenant, je veux vous montrer ce que nous appelons le Java comme langage compilé, parce que nous pouvons voir qu'elle est vraiment compile le code source et donne la .classe fichier(mais rien de bytecode) par:
javac Hello.java -------> produit Hello.class fichier
java Bonjour -------->Diriger le bytecode de JVM pour l'exécution but
La même chose arrive avec python c'est à dire d'abord le code source est converti en le pseudo-code par le compilateur, alors dirigé vers le PVM(responsable de la génération du code natif pour l'exécution de but). Maintenant, je veux vous montrer que nous appelons habituellement Python comme langage interprété, car la compilation se passe derrière la scène
et lorsque nous exécutons le code python à travers:
python Hello.py -------> directement excutes le code et on peut voir la sortie provied que le code est syntaxiquement correct
@ python Hello.py on dirait qu'il exécute directement, mais vraiment il génère d'abord le pseudo-code qui est interprété par l'interprète pour produire le code natif pour l'exécution but.
Disponible- Prend la responsabilité de tant de compilation et d'interprétation.
Regarder dans les lignes ci-dessous si vous avez besoin de plus de détails:
Comme je l'ai mentionné que Disponible compile le code source, mais la compilation se passe avec l'aide de cython ensuite interprétation qui se passe avec l'aide de Disponible
Maintenant, nous allons parler un peu sur le rôle de Just-In-Time compiler en Java et Python
Dans la JVM de l'Interprète de Java existe qui interprète le bytecode ligne par ligne pour obtenir le code machine natif pour l'exécution but mais quand le bytecode Java est exécuté par un interprète, l'exécution sera toujours plus lent. Quelle est donc la solution? la solution est Just-In-Time compiler qui produit le code natif qui peut être exécuté beaucoup plus rapidement que ce qui pourrait être interprété. Certains JVM vendeurs utilisent Interprète de Java et certains utilisent Just-In-Time compiler. Référence: cliquez ici
En python pour obtenir autour de l'interprète pour parvenir à l'exécution rapide d'utiliser un autre python de mise en œuvre(PyPy) au lieu de Disponible.
cliquez ici pour les autres de la mise en œuvre de python, y compris PyPy.
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.
Le code python que vous écrivez est compilé en bytecode python, ce qui crée un fichier avec l'extension .pyc. Si compile à nouveau la question est, pourquoi ne pas en langage compilé.
Noter que ce n'est pas une compilation dans le sens traditionnel du mot. Généralement, nous dirions que la compilation est en tenant un langage de haut niveau et de le convertir en code machine. Mais c'est une compilation de toutes sortes. Compilé dans le code intermédiaire pas en code machine (j'Espère que vous avez Maintenant).
De retour pour le processus de l'exécution, votre bytecode, présent dans le fichier pyc, créé à l'étape de compilation, il est ensuite exécuté par des machines virtuelles, dans notre cas, le Disponible VM
L'horodatage (appelé nombre magique) est utilisé pour valider .py fichier est modifié ou non, selon que de nouvelles pyc fichier est créé. Si pyc est de code actuel, alors elle saute étape de compilation.