Langage et programmation Langage machine Assembleur Langage de haut niveau Compilateur Interprète 1 Un programme exécutable Stocké dans un fichier Chargé par le système Lance son exécution Contenu du fichier Langage machine : binaire Une suite d'instructions Exemple en hexadécimal : A1 01 10 03 06 01 12 A3 01 14 Très difficile pour un humain 2 Langage assembleur Notations symboliques textuelles représentant les instructions du processeur MOV AX, [0110] copie le contenu de 0110h dans le registre AX ADD AX, [0112] ajouter le contenu de 0112h au registre AX MOV [0114], AX stocker AX à l'adresse 0114h Stocké dans un fichier texte Un programme (l'assembleur) traduit ce fichier texte pour obtenir le binaire (en langage machine) démo nasm 3 Langages de plus haut niveau Des structures et méthodes de programmation en assembleur sont systématiques Exemple de la boucle (68000) CLR.W D0 CLR.W D1 LOOP CMP #10,D1 BEQ EXIT ADDQ #1,D1 ADD D1,D0 BRA LOOP EXIT sum = 0 count = 0 while count is not 10 count = count + 1 sum = sum + count end while 4 Langages de plus haut niveau Les compilateurs de différents langages de haut niveau génèrent de l'assembleur C C++ Fortran Ada ... démo gcc 5 Principes d'un compilateur programme source Psource ML machine virtuelle phase de compilation compilateur Mphys (ou autre) machine physique programme objet Pobj Mphys phase d’exécution exécution actions machine physique 6 Principe général d’exécution d’un programme Un programme Psource dans un langage (impératif) L décrit une suite d’actions à exécuter par une machine (virtuelle) ML Le programme est une suite d’instructions dont chacune spécifie une action (passage d’un état initial à un état final) La machine ML est capable d’exécuter (interpréter) le programme Psource, c’est-à-dire de traduire en actions de ML la suite d’instructions de Psource 7 Principe général d’exécution d’un programme Comment faire si on ne dispose pas de la machine ML, mais d’une machine différente, Mphys ? Deux solutions de base • a) Traduire le programme Psource dans un programme Pobj “équivalent” pour la machine Mphys, et faire exécuter Pobj sur Mphys (“équivalent” = qui a le même effet). C’est un schéma de compilation (la traduction de Psource en Pobj est faite par un compilateur) • b) Construire (par programme) sur Mphys un simulateur de la machine ML, et faire exécuter le programme original Psource sur ce simulateur. C’est un schéma d’interprétation (le simulateur de ML sur Mphys est un interprète) 8 Principe général d’exécution d’un programme Certains langages interprétés Lisp Shell unix Python Java ... 9 Compilation et interprétation : comparaison Compilation Efficacité le code engendré s’exécute directement sur la machine physique ce code peut être optimisé Mise au point Interprétation Efficacité l’interprétation directe est souvent longue facteur de x10 à x100 … Mise au point lien direct entre instruction et exécution possibilités étendues d’observation pas toujours facile de relier une erreur d’exécution au texte source Cycle de modification - rééxécution Cycle de modification - toute modification du texte source impose de refaire le cycle complet (compilation, exécution) rééxécution cycle très court (modifier et réexécuter) Code portable 10 Schéma mixte : Java La phase de compilation est indépendante de la machine physique (bytecode) Portage sur une nouvelle machine = réécriture de la JVM sur cette machine compilation (javac) programe source (.java) compilateur Java En réalité pour Java Compilation à la volée Processeurs Java bytecodes (.class) exécution (java) Java Virtual Machine (JVM) machine physique 11