Non. Python n’est pas interprété une ligne après l’autre, le code est compilé en un « bytecode » qui est lui même interprété. Sauf si le code est envoyé ligne par ligne (comme quand l’interpréteur est utilisé de manière interactive), il est donc lu et transformé une première fois pour tout le fichier d’un coup. Ensuite, ce que l’interpréteur convertit en instructions exécutables, ce n’est pas le code python ligne-à-ligne mais le bytecode intermédiaire. Pour s’en rendre compte, tu peux trouver les fichiers pré-compilés en bytecode sous forme de fichiers *.pyc à côté des scripts *.py que tu as déjà exécutés.
que change le JIT ?
Le JIT change l’interprétation du bytecode. Au lieu de parser le bytecode et de faire exécuter les actions correspondantes par l’interpréteur, le JIT compile le bytecode (ou des portions) en instructions machines qui sont directement envoyées au processeur. Le JIT remplace donc tout ou (grande) partie de l’interprétation, par de la compilation. Le code ainsi compilé peut-être réutilisé tel quel sans réinterprétation s’il est appelé/exécuté plusieurs fois, de plus l’étape de compilation permet d’optimiser davantage, ce qui au final permet d’envisager de meilleurs performances que l’interprétation directe du bytecode.
Je ne suis pas expert sur la question, donc éventuellement quelqu’un corrigera. J’espère que ma réponse est claire et correcte, au moins en première approximation.
[^] # Re: JIT
Posté par jyes . En réponse à la dépêche Revue de presse de l'April pour la semaine 20 de l'année 2021. Évalué à 6. Dernière modification le 26 mai 2021 à 13:40.
Non. Python n’est pas interprété une ligne après l’autre, le code est compilé en un « bytecode » qui est lui même interprété. Sauf si le code est envoyé ligne par ligne (comme quand l’interpréteur est utilisé de manière interactive), il est donc lu et transformé une première fois pour tout le fichier d’un coup. Ensuite, ce que l’interpréteur convertit en instructions exécutables, ce n’est pas le code python ligne-à-ligne mais le bytecode intermédiaire. Pour s’en rendre compte, tu peux trouver les fichiers pré-compilés en bytecode sous forme de fichiers *.pyc à côté des scripts *.py que tu as déjà exécutés.
Le JIT change l’interprétation du bytecode. Au lieu de parser le bytecode et de faire exécuter les actions correspondantes par l’interpréteur, le JIT compile le bytecode (ou des portions) en instructions machines qui sont directement envoyées au processeur. Le JIT remplace donc tout ou (grande) partie de l’interprétation, par de la compilation. Le code ainsi compilé peut-être réutilisé tel quel sans réinterprétation s’il est appelé/exécuté plusieurs fois, de plus l’étape de compilation permet d’optimiser davantage, ce qui au final permet d’envisager de meilleurs performances que l’interprétation directe du bytecode.
Je ne suis pas expert sur la question, donc éventuellement quelqu’un corrigera. J’espère que ma réponse est claire et correcte, au moins en première approximation.