Grande Encyclopédie Larousse 1971-1976Éd. 1971-1976
L

langage informatique (suite)

Pour faciliter la programmation, il est préférable d’écrire les instructions sous la forme (MUL ; 1110000001110) en code symbolique ainsi que d’écrire les nombres — adresses et valeurs — sous la forme (MUL ; 7182) en décimal. De même, l’instruction de rupture de séquence BRA : 0057 requiert l’exécution de l’instruction située dans la cellule de mémoire d’adresse 0057 si le contenu de l’accumulateur est nul, et cette représentation est plus suggestive que celle qui est comprise par la machine : (1110000000111001).

En outre, l’adressage symbolique a été introduit afin de permettre de décaler aisément l’emplacement des instructions et des données d’un programme dans la mémoire d’un calculateur. De la sorte, il est possible de remplacer la multiplication précédente par (MUL ; INCR) et le branchement conditionnel précédent par (BRA ; VAT) en ajoutant au programme des directives de définition DEF assignant aux noms les valeurs d’adresse qu’ils représentent :
DEF ; INCR : 7182
DEF ; VAT : 0057.

Le calculateur n’est cependant plus capable d’interpréter directement le programme écrit dans le code symbolique du langage-source, mais il doit être doté d’un assembleur, c’est-à-dire d’un programme écrit en langage-machine et chargé de traduire tout programme symbolique en code-machine, puis de déclencher l’exécution du programme traduit. Un avantage considérable du codage symbolique est sa redondance, qui permet à l’assembleur de détecter, voire de corriger des erreurs. Il permet aussi l’association d’une étiquette symbolique à chaque instruction et l’introduction de macro-instructions puissantes qui génèrent chacune une séquence d’instructions-machine. Des pseudo-instructions sont incorporées au langage pour spécifier à l’assembleur la nature ou le format des données. En introduisant une assignation de valeur VAL pour spécifier que le contenu de l’adresse 7182 est la constante 0000, il est possible de suivre le procédé d’assemblage sur l’exemple suivant :

Le résultat de l’exécution de cette sous-séquence de programme consiste à sauter l’instruction contenue par la cellule d’adresse 0056.

Le langage obtenu reste de bas niveau, car il est propre à un calculateur. Il est appelé langage d’assemblage dans la mesure où une instruction du langage-machine correspond pratiquement à chacune de ses instructions symboliques.


Du langage d’assemblage au langage évolué

Un autocode possède les avantages d’un langage d’assemblage plus les trois possibilités suivantes.
1. Il peut laisser au traducteur le soin de choisir sans directives les adresses d’implantation des instructions et des données en mémoire.
2. Il permet l’emploi d’expressions comme A = (F + B) × C + (D × E) au lieu d’obliger à programmer une séquence équivalente en code symbolique :
(RAZ ; F) : remettre à zéro l’accumulateur et y ajouter F ;
(ADD ; B) : ajouter B ;
(MUL ; C) : multiplier par C ;
(MEM ; INCR) : ranger en mémoire à l’adresse INCR ;
(RAZ ; D) : remettre à zéro l’accumulateur et y ajouter D ;
(MUL ; E) : multiplier par E ;
(ADD ; INCR) : ajouter le contenu de INCR. Le résultat est dans l’accumulateur A.
3. L’autocode offre des instructions de rupture de séquence à format plus élaboré du type (SI : expression L, opérateur relationnel, expression R ; ALORS : étiquette), permettant d’exprimer par exemple que, si la valeur de l’expression L est inférieure à celle de l’expression R, un branchement vers l’étiquette doit avoir lieu.

Ces trois nouvelles possibilités permettent non seulement de programmer dans un code-source proche du langage mathématique usuel, mais aussi de rendre le même programme exécutable sur des calculateurs différents. Sa traduction en code-machine est cependant plus complexe et requiert un programme appelé compilateur, qui effectue la traduction en langage dit objet, de sorte que, pour l’efficacité du traitement, la longueur du programme-source compte moins que la consommation en espace-mémoire ou en temps d’exécution par le programme-objet. Les programmeurs désirent pouvoir non seulement réutiliser des sections de programmes rédigées par d’autres (calcul de sinus...), mais aussi assurer automatiquement le regroupement de sections d’origine différente au sein d’un nouveau programme. Un éditeur de liens résout les références entre sections.

Les tâches accomplies par un compilateur comprennent donc l’analyse du programme-source, la recherche des sous-programmes et sections appropriées ainsi que leur collecte dans une bibliothèque, l’allocation de mémoire et la génération effective du code-objet. Sa sortie est un programme directement exécutable par une machine donnée. En revanche, un interpréteur est un programme qui exécute un programme-source, mot par mot, ligne par ligne ou phrase par phrase. Sa sortie est le résultat de l’exécution des unités du langage. Dans ce cas, la compacité du langage et sa structuration en unités significatives comptent plus pour l’efficacité du traitement que la consommation en espace-mémoire par l’interpréteur et le code généré : en effet, le but est de favoriser une interaction conversationnelle et non de minimiser le temps total d’exécution.


Langages les plus répandus

Depuis le short code de UNIVAC (Universal Automatic Calculators) [1957], plusieurs centaines de langages de haut niveau ont été définis par l’introduction progressive des indices de boucles, des appels de sous-programmes, des concepts de variables locales et globales, au point qu’une rupture conditionnelle de séquence peut s’écrire sous la forme (SI [expression L] [opérateur relationnel] [expression R] ALORS FAIRE [nom de sous-programme] SINON FAIRE [nom de sous-programme]). De plus, des commentaires peuvent être ajoutés dans le corps d’un programme et en facilitent la documentation.

• Le langage informatique le plus répandu est FORTRAN (FORmula TRANslator), destiné originellement au calcul technique. Comme tous les autres, il est victime de deux inconvénients :
— l’ignorance de la machine sous-jacente amène à rédiger des programmes inadaptés et donc inefficaces ;
— le désir de standardisation ou la recherche de la facilité entraîne l’utilisation de n’importe quel langage pour n’importe quel problème.

• Dans le domaine de la gestion, COBOL (COmmon Business Oriented Language) sert à programmer le traitement des fichiers de données, leur maintenance, la tabulation de rapports.

• Un autre langage, ALGOL (ALGOrithmic Language), d’origine universitaire, est utilisé pour le traitement d’algorithmes scientifiques. Défini avec soin, il permet l’appel d’un sous-programme à partir de lui-même (récursion) ainsi que l’allocation de mémoire non pas à la traduction, mais à l’exécution (dynamiquement grâce à sa structure de blocs).

• Le langage PL/1 (Programming Language) ajoute aux propriétés de ces trois langages majeurs des facilités pour le traitement de listes (arbres, etc.). Il est lancé par IBM (International Business Machines), et ses initiales le présentent comme le langage de programmation numéro 1.

• Enfin, un autre langage, APL (A Programming Language), a été conçu pour faciliter le dialogue homme-machine en mode interprétatif grâce à une formulation matricielle compacte.