Compilateur & Interpreteur
Langage Python - Langage Machine
Considérons la fonction suivante en Python :
def produit(a,b):
return a*b
Saisissez cette fonction dans la console Python. Puis tapez les instructions suivantes :
import dis
dis.dis(produit)
Vous obtenez le résultat suivant :
Lorsque vous executez un programme Python, celui-ci est traduit sous forme d'instructions en langage de type "assembleur".
Le module dis permet de traduire notre programme python dans ce langage.
En fait, sans rentrer dans le détail, il s'agit en faîtes de pseudo-code d'assemblage qui au moment de l'execution est traduit en langage machine.
Tout langage de programmation, pour être exécuté par une machine doit être à un moment où à un autre traduit en langage binaire.
Compilateur vs Interpreteur
Il existe plusieurs manières de procéder :
- La première consiste à traduire le programme dans son ensemble une fois pour toute et générer un fichier avec le code binaire prêt à être exécuté.
Il s'agit de la méthode dîte de compilation réalisée par un compilateur. Le langage C est un exemple de langage compilé.
- La deuxième méthode consiste à traduire les instructions en langage binaire au fur et à mesure de la lecture du programme.
Il s'agit de la méthode dîte d'interprétation réalisée par un interpréteur. Le langage Basic est un exemple de langage interpété.
- Enfin il existe des méthodes mixtes qui consistent à traduire le programme en pseudo-code. Ce pseudo-code est interprété par une machine virtuelle au moment de l'execution.
L'intérêt de cette approche est que l'execution et la traduction du pseudo-code en langage binaire est plus rapide. Mais également, le fait que ce pseudo-code permet une certaine indépendance vis à vis du processeur sur lequel il est exécuté.
En effet, il suffit juste de disposer d'une machine virtuelle spécifique au processeur en question.Python et Java sont des exemples de langages utilisant cette technique.
Langages et niveau d'abstraction.
On parle également de niveau d'abstraction d'un langage. Plus celui-ci est proche de notre langage naturel et plus son niveau d'abstraction est élevé.
Plus le langage est proche de la machine (binaire) plus celui-ci est de bas niveau.
Ressources :
- python code disassembler.
- introduction-python-bytecode.