Ordinateur, programme et langage
CHAPITRE 1
10
C’est ainsi que sont apparus de très nombreux langages que l’on a qualifiés d’évolués. La
plupart sont tombés dans l’oubli mais quelques-uns sont passés à la postérité : Fortran, Basic,
Cobol, Pascal, ADA, C, Visual Basic, Delphi, C++, Java, C#, PHP...
Dès maintenant, vous pouvez percevoir l’intérêt d’un langage évolué en examinant
l’intruction suivante (elle se présentera textuellement sous cette forme dans la plupart des
langages) :
Y = A * X + 2 * B + C
Sa signification est quasi évidente : à partir des valeurs contenues dans les emplacements
nommés A, X, B et C, calculer la valeur de l’expression arithmétique A*X + 2*B + C (le
symbole * représente une multiplication), puis ranger le résultat dans l’emplacement
nommé Y.
Comme vous pouvez vous en douter, le même travail demanderait bon nombre d’opérations
en langage machine (ou en assembleur), par exemple : prélever la valeur de A, la multiplier
par celle de X, ranger le résultat dans un emplacement provisoire, prélever la valeur de B, la
multiplier par 2, ajouter la valeur provisoire précédente, ajouter la valeur de C et, enfin, ranger le résultat final en Y.
Bien entendu, quel que soit le langage évolué utilisé, il est nécessaire, là encore, d’en réaliser,
par programme, la traduction en langage machine. Pour cela, il existe deux techniques
principales : la compilation et l’interprétation.
La compilation consiste à traduire globalement l’ensemble du programme en langage évolué
(qu’on nomme souvent programme source) en un programme en langage mahine (qu’on
nomme souvent programme objet), en utilisant un programme nommé compilateur. Si cette
traduction s’est déroulée sans erreur, le programme objet peut être exécuté, en le plaçant en
mémoire, autant de fois qu’on le désire, sans avoir besoin de recourir à nouveau au compilateur. De nombreux programmes sont fournis sous cette forme objet (dite aussi compilée) avec
la plupart des micro-ordinateurs du commerce.
L’interprétation consiste à traduire chaque instruction du programme source, avant de
l’exécuter, à l’aide d’un programme nommé interpréteur. Dans ce cas, il n’existe plus de
programme objet complet et, à un instant donné, on trouve en mémoire, à la fois le
programme source et le programme interpréteur.
On notera bien que le compilateur, comme l’interpréteur dépendent, non seulement du langage concerné, mais également du type d’ordinateur pour lequel on effectue la traduction.
Par ailleurs, il existe une technique intermédiaire entre compilation et interprétation qui
consiste à traduire globalement un programme source (compilation) en un langage
intermédiaire défini comme étant commun à un ensemble de machines, et à interpréter le
résultat à l’aide d’un programme approprié. Cette technique avait été employée avec Pascal
et elle l’est actuellement avec Java et C#. En toute rigueur, cette technique est très proche de
la compilation, dans la mesure où tout se passe comme si le langage intermédiaire en
question était en fait une sorte de langage machine unviersel. L’interprétation finale ne sert
qu’à l’adapter à la machine concernée au moment de l’exécution.
CHAPITRE 1
10
C’est ainsi que sont apparus de très nombreux langages que l’on a qualifiés d’évolués. La
plupart sont tombés dans l’oubli mais quelques-uns sont passés à la postérité : Fortran, Basic,
Cobol, Pascal, ADA, C, Visual Basic, Delphi, C++, Java, C#, PHP...
Dès maintenant, vous pouvez percevoir l’intérêt d’un langage évolué en examinant
l’intruction suivante (elle se présentera textuellement sous cette forme dans la plupart des
langages) :
Y = A * X + 2 * B + C
Sa signification est quasi évidente : à partir des valeurs contenues dans les emplacements
nommés A, X, B et C, calculer la valeur de l’expression arithmétique A*X + 2*B + C (le
symbole * représente une multiplication), puis ranger le résultat dans l’emplacement
nommé Y.
Comme vous pouvez vous en douter, le même travail demanderait bon nombre d’opérations
en langage machine (ou en assembleur), par exemple : prélever la valeur de A, la multiplier
par celle de X, ranger le résultat dans un emplacement provisoire, prélever la valeur de B, la
multiplier par 2, ajouter la valeur provisoire précédente, ajouter la valeur de C et, enfin, ranger le résultat final en Y.
Bien entendu, quel que soit le langage évolué utilisé, il est nécessaire, là encore, d’en réaliser,
par programme, la traduction en langage machine. Pour cela, il existe deux techniques
principales : la compilation et l’interprétation.
La compilation consiste à traduire globalement l’ensemble du programme en langage évolué
(qu’on nomme souvent programme source) en un programme en langage mahine (qu’on
nomme souvent programme objet), en utilisant un programme nommé compilateur. Si cette
traduction s’est déroulée sans erreur, le programme objet peut être exécuté, en le plaçant en
mémoire, autant de fois qu’on le désire, sans avoir besoin de recourir à nouveau au compilateur. De nombreux programmes sont fournis sous cette forme objet (dite aussi compilée) avec
la plupart des micro-ordinateurs du commerce.
L’interprétation consiste à traduire chaque instruction du programme source, avant de
l’exécuter, à l’aide d’un programme nommé interpréteur. Dans ce cas, il n’existe plus de
programme objet complet et, à un instant donné, on trouve en mémoire, à la fois le
programme source et le programme interpréteur.
On notera bien que le compilateur, comme l’interpréteur dépendent, non seulement du langage concerné, mais également du type d’ordinateur pour lequel on effectue la traduction.
Par ailleurs, il existe une technique intermédiaire entre compilation et interprétation qui
consiste à traduire globalement un programme source (compilation) en un langage
intermédiaire défini comme étant commun à un ensemble de machines, et à interpréter le
résultat à l’aide d’un programme approprié. Cette technique avait été employée avec Pascal
et elle l’est actuellement avec Java et C#. En toute rigueur, cette technique est très proche de
la compilation, dans la mesure où tout se passe comme si le langage intermédiaire en
question était en fait une sorte de langage machine unviersel. L’interprétation finale ne sert
qu’à l’adapter à la machine concernée au moment de l’exécution.
