2.1.les langages



Plan du chapitre:

1. Historique des langages de programmation
 

    1.1 Les langages procéduraux ou impératifs
    1.2 Les langages fonctionnels
    1.3 Les langages logiques
    1.4 Les langages orientés objets (L.O.O)
    1.5 Les langages de spécification
    1.6 Les langages hybrides
     

PanneauHistoric.dif
 

1. Historique des langages de programmation

    La communication entre l’homme et la machine s’effectue à l’aide de plusieurs moyens physiques externes. Les ordres que l’on donne à l’ordinateur pour agir sont fondés sur la notion d’instruction comme nous l’avons déjà vu. Ces instructions constituent un langage de programmation. Depuis leur création, les langages de programmation ont évolué et se sont diversifiés.
     

    Schématiquement il est possible de les classer en cinq catégories :
     
    1° Les langages procéduraux ou impératifs.

    2° Les langages fonctionnels.

    3° Les langages logiques.

    4° Les langages objets.

    5° Les langages de spécification.

    L’un des principaux objectifs d’un langage de programmation est de permettre la construction de logiciels ayant un minimum de qualités comme la fiabilité, la convivialité, l’efficacité.

    Il faut connaître l’histoire des langages et se rendre compte qu’à ce jour, malgré les nouveaux langages du marché et leur efficacité, ce sont Cobol et Fortran qui sont les plus utilisés (numériquement) dans le monde. L’investissement intellectuel et matériel prédomine sur la nouveauté. Cette remarque est la clef de la compréhension de l’évolution actuelle et future des langages.

    Les langages ont commencé directement sur des instructions machines écrites en binaire et donc rudimentaires sur le plan sémantique. Les améliorations sur cette catégorie de langages se sont limitées à construire de s langages symboliques (langage avec mémonique) et des macro-assembleurs. J.Backus d’IBM avec son équipe a mis au point dès 1956-1958 le premier langage évolué de l’histoire, uniquement conçu pour le calcul scientifique (à l’époque l’ordinateur n’était qu’une calculatrice géante).

    Les années 70 ont vu s’éloigner un rêve d’informaticien : parler et communiquer en langage naturel avec l’ordinateur.

    Actuellement les langages évolués se diversifient et augmentent en qualité d’abstraction et de convivialité.
     

    classification sur un axe d’abstraction : de la machine à l’homme
     

    Les langages majoritairement les plus utilisés actuellement sont ceux qui font partie de la catégorie des langages procéduraux. Les ordinateurs étant des machines de Turing (améliorées par von Neumann), la notion de mémoire machine est représentée par la donnée abstraite qu’est une variable, dans un langage procédural. D’autre part, les machines de Türing sont séquentielles et les langages impératifs traitent les instructions séquentiellement. Ceci montre que les langages procéduraux sont parfaitement bien adaptés à l’architecture de l’ordinateur ; ils sont donc plus " facilement " adaptables à la machine.
     

    1.1 Les langages procéduraux ou impératifs

       
    Tous les langages procéduraux ont un ancêtre commun : le langage FORTRAN.
     
     

    Voici un arbre généalogique (non exhaustif) de certains langages connus. Pour chaque langage nous avons indiqué quelques éléments de référence.

    Par exemple : FORTRAN (58) [scientifique - IBM] signifie que le premier compilateur commercial a été diffusé environ en 1958, que le domaine d’activité pour lequel le langage a été élaboré est le domaine du calcul scientifique, enfin qu’il s’agit d’un acte commercial puisque c’est la compagnie IBM qui l’a fait réaliser.
     
     

     
     
     

    Dans cette courte liste, seuls Algol, Basic et Pascal sont des langages qui ont été conçus par des équipes dans des buts de recherche ou d’enseignement. Les autres langages sont élaborés par des firmes et des compagnies dans des buts de commercialisation, de rationalisation des coûts de gestion (DOD) etc... Les langages de programmation, comme le reste des outils de la science informatique, sont fortement soumis aux règles du marché, ce qui provoque pour cette discipline le pire et le meilleur.

    Pour donner les propriétés des autres catégories de langages, nous nous servirons de la catégorie des langages procéduraux comme référence.

    Dans un langage procédural, l’affectation (transfert d’une valeur dans une mémoire) est la base des actions sur les données. La catégorie la plus utilisée après les langages procéduraux est celle des langages fonctionnels.
     

    1.2 Les langages fonctionnels

       
    Dans un langage fonctionnel, les actions reposent sur des fonctions mathématiques ou non qui renvoient des résultats. Un langage fonctionnel est essentiellement composé d’un dictionnaire de fonctions prédéfinies et d’un mécanisme de construction de nouvelles fonctions par l’utilisateur.

    Citons quelques représentants des langages fonctionnels :

    LISP :(LISt Processing - 1962) en fait c’est essentiellement un langage de traitement de listes.

    SCHEME : c’est un dialecte pédagogique épuré(1975) de LISP.

    ML : langage fonctionnel moderne(1990) classé dans la catégorie des langages fonctionnels fortement typés (l’INRIA diffuse gratuitement sur micro-ordinateur une version CAML-Light pour l’enseignement). CAML est utilisé actuellement pour l'enseignement de l'informatique dans les classes préparatoires aux grandes écoles scientifiques françaises.
     

    1.3 Les langages logiques

    Citons la catégorie des langages de programmation en logique et son principal représentant :

    PROLOG (PROgrammation en LOGique - 1982).

    Dérivé de l’intelligence artificielle, il oblige le programmeur à penser ses actions en termes de buts et à en faire une description relationnelle (vision déclarative). Le langage est fondé sur un moteur d’inférence d’ordre 1 (logique des prédicats), et permet l’exploration exhaustive automatique de différents chemins amenant à des solutions. Il possède une qualité intéressante : il est possible d’interpréter un programme prolog d’une manière déclarative ou d’une manière procédurale. Le Groupe d’Intelligence Artificielle de Marseille-Luminy fournit des prologs sur micro-ordinateurs.
     

    1.4 Les langages orientés objets (L.O.O)

    Les langages à objets : ils sont fondés sur une seule catégorie d’éléments : " les objets " qui communiquent entre eux grâce à l’envoi de messages (grâce à des opérateurs appelés méthodes). Par rapport à un langage impératif typé, un objet est l’équivalent (mutatis mutandis) d’une variable (simple ou structurée) et la classe dont il est l’instance correspond au type de la variable.

    SIMULA-67 (1967) est le premier langage objet, SMALLTALK-80(1980) est un environnement de développement purement objet, Eiffel(1990) est un langage objet tourné vers le génie logiciel et la réutilisabilité.
     

    1.5 Les langages de spécification

    Les langages de spécification sont encore du domaine de la recherche. Leurs objectifs sont de décrire le plus rigoureusement possible (les modèles principaux sont mathématiques) un logiciel afin de pouvoir le valider et le vérifier.

    Nous ne mentionnerons ici que le langage LPG de D.Bert(Grenoble) pour les spécifications de types abstraits algébriques, Z de J.R. Abrial, le langage dont la notation est fondée sur la théorie des ensembles (puis d’une amélioration de Z dénotée B par Abrial) et VDM langage formel de spécification par pré-condition et post-condition. Ces langages ne peuvent être utilisés d’une manière pratique que sous forme de notation, bien qu’ils soient implantés sur des systèmes informatiques. Ils ne sont pas encore à la disposition du grand public comme les langages des catégories précédentes, bien que certains soient utilisés dans des sites industriels.

    Par la suite, nous utiliserons un langage de spécification pédagogique fondé sur les types abstraits algébriques.
     
     

    1.6 Les langages hybrides

Une mention spéciale ici pour des concepts hybrides qui peuvent être de bons compromis entre des catégories différentes. Les concepteurs de tels langages essaient d’importer dans leur langage les qualités inhérentes à au moins deux catégories. La catégorie la plus utilisée est celle des langages impératifs. Par exemple, la plupart des langages impératifs purs cités plus haut bénéficient d’une " extension " objet, comme C++ qui est une extension orientée objet du langage C conçu à l’origine pour écrire le système d’exploitation Unix.

Plus récemment est apparu un langage comme Delphi de Borland que nous utiliserons plus tard et qui allie l’approche pédagogique et typée du Pascal, l’approche objet du C++ et les approches visuelles et événementielles de Visual Basic de Microsoft (la sortie fin 2001 de la version entièrement orientée objet de VB, dénommée VB .Net, procure à Visual Basic un statut de langage hybride). Enfin, mentionnons le langage JAVA qui permet le développement multi-plateforme en particulier pour l’intranet et qui est grandement utilisé malgré son manque de rapidité dû à sa machine virtuelle. Un mot sur le tout récent langage C# support de développement de la plateforme Microsoft .Net, qui a été inventé par le père du langage Delphi (C# s'approprie des avantages de Java et de Delphi, il suit de très près la syntaxe de Java et celle de C++)et qui est le fer de lance de la plateforme .Net de microsoft. 

Object Pascal, C++, Ada95, Java, C# sont des langages procéduraux qui ont été fortement étendus ou remaniés pour se conformer aux standards objets.

Remarque de vocabulaire:
L’ordinateur ne " comprenant " que le langage binaire, il lui faut donc un " interpréte " qui lui traduise en binaire exécutable, les instructions que l’humain lui fournit en langage évolué. 

Cette traduction est assurée par un programme appelé compilateur.

Un compilateur du langage L est donc un programme chargé de traduire un programme " source " écrit en L par un humain, en un programme " cible " écrit en binaire exécutable par l’ordinateur.