langage

Ensemble de caractères, de symboles et de règles qui permettent de les assembler, utilisé pour donner des instructions à un ordinateur.

INFORMATIQUE

Le principe d'un langage de programmation

Comme les « langages naturels » (le français, l'anglais…), les langages de programmation sont des systèmes d'expression et de communication. Mais les « phrases » utilisées par ces langages, appelées programmes, forment des textes destinés à être compris par des ordinateurs. Cependant, les langages utilisés pour communiquer avec les ordinateurs ne sont pas tous considérés comme des langages de programmation. Il s'agit seulement des langages qui, théoriquement, sont suffisamment universels pour exprimer tous les traitements possibles (algorithmes) qu'un ordinateur peut effectuer. Ne sont pas considérés comme des langages de programmation, les langages d'interrogation de bases de données, et plus généralement les langages dits « de quatrième génération » (L4G en abrégé) – langages SQL (Structured Query Language) et Java – qui permettent de réaliser de façon conviviale des applications particulières.

On peut considérer qu'un programme est un texte dépourvu de toute ambiguïté et qui doit être écrit en respectant scrupuleusement les « règles de grammaire » du langage.

Les niveaux de langage

Un programme est constitué d'instructions destinées à être exécutées par la machine. Seules les instructions qu'une machine, ou plus précisément le processeur de l'ordinateur, est capable d'interpréter directement sont celles d'un langage de nature binaire (les programmes sont des combinaisons de nombres binaires 0 et 1). Ce langage est appelé « langage machine ». C'est le langage de plus « bas niveau ». Sur les premiers ordinateurs, c'était le seul moyen d'écrire un programme. Mais, très vite est apparue la nécessité d'utiliser des langages de programmation plus évolués, de plus « haut niveau », c'est-à-dire plus proches de l'esprit humain, et cela pour deux raisons : la première raison est qu'écrire un programme en langage machine est une tâche extrêmement minutieuse et fastidieuse, ce qui entraîne un risque d'erreurs très élevé ; la deuxième raison est que chaque processeur a son propre langage machine, ce qui empêche de transporter le même programme d'un matériel à un autre.

Un programme écrit dans un langage de plus haut niveau que le langage machine ne peut pas être exécuté directement par l'ordinateur. Il doit être préalablement traduit en langage machine. Cette traduction est effectuée automatiquement par l'ordinateur lui-même. C'est un programme appelé « traducteur » qui effectue ce travail.

Les langages d'assemblage

Un premier niveau de langage au-dessus du langage machine a commencé à être utilisé dans les années 1950. Il s'agit du langage d'assemblage qui, en gros, remplace des suites de 0 et de 1 par des notations symboliques. La traduction d'un tel langage s'appelle l'assemblage. Mais ce genre de langage dépend encore de la famille d'ordinateurs pour laquelle il a été développé. De plus, il reste peu facile à lire et à comprendre et il ne convient donc pas pour écrire de gros programmes fiables.

Les langages évolués

On appelle « langages évolués » les langages de haut niveau qui non seulement sont indépendants de toute machine mais aussi sont plus faciles à lire et à comprendre parce qu'ils regroupent en une seule instruction de haut niveau des suites d'opérations élémentaires de bas niveau, par exemple additionner deux variables numériques sans se préoccuper des détails de transfert entre mémoire centrale et registres du processeur. Il y a essentiellement deux sortes de programmes traducteurs pour ce genre de langage : les compilateurs et les interpréteurs.

Le programme en langage évolué qui doit être traduit est appelé programme source. Un interpréteur traduit les instructions du programme source l'une après l'autre et les exécute au fur et à mesure. Le compilateur traduit la totalité du programme source en produisant une nouvelle version exécutable. Comme un programme est en général destiné à être exécuté de nombreuses fois, l'avantage de la compilation est que cette traduction est faite une fois pour toutes et sollicite beaucoup moins le processeur. Mais l'interprétation peut aussi avoir des avantages : d'une part, il est plus facile de produire un interpréteur qu'un compilateur et d'autre part, l'interprétation rend plus aisée la mise en place des méthodes d'aide à la mise au point des programmes.

Les langages algorithmiques/déclaratifs/objets

L'évolution des langages décrite précédemment a conduit à des langages de haut niveau qui restent liés à un style de programmation dit algorithmique ou encore impératif ou procédural. Tout se passe comme si on programmait dans le langage machine d'une machine virtuelle de très haut niveau. Par exemple, la notion de variable est une abstraction de la notion de case mémoire et l'instruction d'affectation décrit l'action fondamentale qui consiste à modifier la valeur d'une variable. De façon générale, un programme décrit une suite d'actions que la machine doit effectuer.

Quelques langages algorithmiques classiques

Parmi les langages algorithmiques classiques, on peut citer en particulier FORTRAN apparu dès 1954 et encore utilisé pour la programmation de calculs scientifiques, COBOL (1959) utilisé pour des applications de gestion, BASIC (1964). Le langage Pascal (1969) a marqué une étape dans la structuration rigoureuse des programmes et est encore largement utilisé pour l'enseignement de la programmation. Le langage Ada est particulièrement adapté à la production de très gros programmes vus comme des assemblages de « composants logiciels ». Le langage C est aussi largement utilisé, en liaison avec l'essor du système d'exploitation Unix.

Le langage déclaratif ou descriptif

Au style de programmation algorithmique, largement dominant, on peut opposer un style de programmation dit déclaratif ou encore descriptif, qui cherche à atteindre un niveau encore plus haut. Un programme est alors vu comme la définition de fonctions (on parle alors de « programmation fonctionnelle ») ou de relations (on parle alors de « programmation logique »). Le langage LISP (1959) peut être considéré comme un précurseur des langages fonctionnels. Parmi les langages fonctionnels, on peut aussi citer les différents dialectes actuels du langage ML. La famille des langages de programmation logique est composée principalement de PROLOG (1973) et de ses successeurs. Les langages fonctionnels ou logiques sont surtout utilisés pour certaines applications relevant de ce qu'on appelle « l'intelligence artificielle ».

La programmation « orientée objets »

Le style de programmation « orientée objets » constitue une autre avancée importante dans l'évolution des langages de programmation et connaît actuellement un essor considérable. L'idée fondamentale est de permettre au mieux la conception et la réutilisation de composants logiciels et, pour cela, de structurer les programmes en fonction des objets qu'ils manipulent. On peut citer en particulier Smalltalk, Eiffel, mais le langage orienté objets le plus utilisé est certainement C++, extension du langage C. Ada 95 se veut aussi une extension de Ada adaptée à la programmation objets. Le langage Java, dont la vogue actuelle est liée à des applications au World Wide Web (Internet) est aussi un langage orienté objets. Il présente l'immense avantage d'être portable, c'est-à-dire qu'un programme écrit en Java peut fonctionner sur des machines de constructeurs différents et sous plusieurs systèmes d'exploitation sans aucune modification.

Les programmes Java sont soit interprétés soit compilés. Les versions interprétées sollicitent beaucoup l'unité centrale de l'ordinateur et cela peut avoir des conséquences fâcheuses pour les temps de réponse des applications interactives.

Le parallélisme

Citons aussi, sans entrer dans les détails, le parallélisme, c'est-à-dire les techniques qui permettent d'accroître les performances d'un système grâce à l'utilisation simultanée de plusieurs processeurs. Des problèmes difficiles se posent pour exprimer le parallélisme dans des langages de programmation et pour compiler ces langages. Le langage HPF (High Performance FORTRAN ) est un exemple récent de tentative pour résoudre ces difficultés.