Si je comprends bien, la cause de la différence de vitesse entre les langages compilés et python est que le premier compile du code jusqu'au code de la machine native, tandis que python compile en python bytecode, pour être interprété par le PVM. Je vois que de cette façon les codes python peuvent être utilisés sur plusieurs systèmes d'exploitation (au moins dans la plupart des cas), mais je ne comprends pas, pourquoi n'y a-t-il pas un compilateur supplémentaire (et facultatif) pour python, qui compile de la même manière que les compilateurs traditionnels . Cela laisserait au programmeur le choix, ce qui est plus important pour lui; exécutabilité multiplateforme ou performances sur machine native. En général; pourquoi n'y a-t-il pas de langues qui pourraient se comporter à la fois comme compilées et interprétées?
la source
Réponses:
Non. La raison pour laquelle il existe des différences de vitesse entre des langages tels que Python et C ++ est que les langages de type statique fournissent au compilateur des tonnes d'informations sur la structure du programme et ses données, ce qui lui permet d'optimiser à la fois les calculs et l'accès à la mémoire. Parce que C ++ sait que la variable est de type int, il peut déterminer la manière optimale de manipuler cette variable avant même que le programme ne soit exécuté. En Python d'autre part, le runtime ne sait pas quelle est la valeur d'une variable jusqu'à ce que la ligne soit atteinte par l'interpréteur. Ceci est extrêmement important pour les structures, où en C ++, le compilateur peut facilement indiquer la taille de la structure et chaque emplacement de ses champs dans la mémoire pendant la compilation. Cela lui donne une énorme puissance pour prédire comment les données pourraient être utilisées et lui permet d'optimiser en fonction de ces prédictions.
Pour compiler efficacement des langages comme Python, vous devez:
la source
eval
et beaucoup d'autres choses pour rendre les rédacteurs du compilateur tristes. Ce n'est pas au niveau de gcc, mais c'est certainement plus rapide que l'interpréteur de CPython.Deux concepts pourraient nous aider à mieux comprendre pourquoi Python compilé en code machine natif "peut" ne pas fonctionner aussi vite que C compilé ou d'autres langages compilés couramment. Ils sont appelés liaison anticipée et liaison tardive.
Je devrais commencer par dire que je ne suis pas un expert Python, et je suis venu sur ce site par accident. Mais j'aime ce site.
Comme mentionné dans une autre réponse ici, le compilateur C ++ peut en savoir beaucoup sur le programme et prendre des décisions sur les opérations à utiliser pour des structures de données spécifiques. Par exemple, si deux variables entières doivent être ajoutées ensemble, le compilateur sait qu'il s'agit d'entiers natifs, de 32 bits de large par exemple et il peut les ajouter avec une instruction "ADD". Il compile donc l'instruction ADD dans le code. Il est verrouillé et ne peut pas être modifié pendant l'exécution du programme. C'est une liaison anticipée.
D'un autre côté, dans un langage comme Python, nous pourrions nous attendre à ce que le programme jette différents types de données ensemble de manière complexe. Maintenant, le compilateur ne sait pas si nos 2 variables sont des entiers, des flottants, des chaînes ou des listes. Il doit donc compiler du code qui détermine ces informations au moment de l'exécution et sélectionner l'opération correcte pendant l'exécution du programme. Il s'agit d'une liaison tardive et nous pouvons comprendre qu'il y aura un impact sur les performances pour effectuer ce travail supplémentaire pendant l'exécution du programme. C'est le prix à payer pour garder ces options ouvertes dans un langage comme Python, mais il offre une flexibilité d'exécution maximale.
la source
Je pense que cela a plus à voir avec les spécificités de Python lui-même, la même raison pour laquelle vous ne pouvez pas compiler C # en code machine. Les spécificités de la langue rendraient vos programmes bogués même si cela était possible en raison de la nature de la langue. Pourquoi ne pas simplement apprendre le langage C? C'est beaucoup plus facile que C ++ et légèrement avancé que Python mais toujours accessible.
la source