Histoire et évolution des langages de programmation

Par Denis Sureau

Ce document est © 2001/2014 par Denis Sureau. Vous pouvez l'imprimer et le reproduire à des fins éducatives. Vous ne devez pas mettre ce document sur un autre site mais plutôt placer un lien sur cette page.
Critères de sélection: Un langage de programmation entre dans l'histoire s'il est largement utilisé ou s'il a inspiré d'autres langages de programmation. Des langages nouveaux et innovateurs sont aussi dans la liste.


Les langages de programmation généraux ont connu une évolution laborieuse et étrange depuis 1946. Pour montrer l'évolution de la syntaxe, des fonctionnalités, les voici classés par date d'implémentation. Quand Pascal, C++, Python, sont apparus, qui les a imaginés, pourquoi les langages ont-ils ces différences?
Les dates retenues correspondent au moment ou le premier programme à pu être écrit et compilé dans le langage. Il est fourni quand c'est possible le site d'un compilateur ou interpréteur pour le langage ou une fiche détaillée pour les principaux d'entre eux. L'historique concerne surtout les langages d’application ou de script universels, mais je mentionne certains langages spécialisés importants et tous ceux qui ont eu une influence majeure dans la conception ultérieure d'autres langages de programmation.
Si vous trouvez des erreurs ou des omissions, vous pouvez le dire: envoyez un commentaire à: webmaster@scriptol.fr.

Les principales catégories de langages (à ce jour), sont les langages fonctionnels et procéduraux (dits aussi impératifs), et les langages logiques.
Un langage est dit fonctionnel, au sens mathématique du mot fonction, si chaque opération est indépendante du contexte, et si le résultat d'une fonction dépend exclusivement de ses arguments.
Haskell, Lisp, sont des langages fonctionnels de genres différents. Ils sont plutôt destinés à l'intelligence artificielle. Lisp utilise le principe de réduction de problème, Prolog le principe de résolution par des prédicats de premier ordre, c'est un langage logique.
On oppose aussi le style impératif au style déclaratif. En fait on considère déclaratif un système qui énonce des connaissances, l'énoncé d'un problème, et fournit un mécanisme de résolution. Prolog se dit déclaratif.
Pratiquement tous les langages, fonctionnels ou impératifs sont maintenant orientés objets, et utilisent des classes décrivant des objets réels ou purement informatiques.

On distingue 4 générations de langages de programmation plus au moins deux nouvelles tendances.

  1. Langages machine.
  2. Langages symboliques et autocodes.
  3. Langages indépendants du matériel, comme Basic, C, Cobol, Algol...
  4. Langages conçus pour décrire le problème, comme Simula et autres langages à objets .
  5. Les langages à programmation logique prétendent représenter la cinquième génération, mais leur utilisation est marginale.  La cinquième génération pourrait être celle des langages Internet, donc fonctionnant sur toute machine et compilés en code intermédiaire (dit virtuel).
  6. Les langages "Markup" inspirés de XML sont la dernière tendance, ils intègrent le code et les données sous une forme extensible, et qui fonctionnent sur le web.

Indépendamment de ces générations théoriques, les grandes dates sont les suivantes:

Premier langage

Ada Lovelace ainsi que Babbage et son neveu écrivaient des programmes pour le projet de machine à différences puis la machine analytique de Babbage.
En 1945, l'allemand K Zuse, inventeur de l'ordinateur Z3, aurait défini un langage évolué pour cette machine (avec arrays et records). On possède peu de documents sur ce langage.

Assembleur

Les assembleurs existent depuis le début des ordinateurs. Ils associent un nom symbolique au code du langage machine, par exemple:

add bx, 4
cmp [adr], 3      // comparaison
jmp address     // branchement
La programmation en assembleur ne se pratique plus sur les ordinateurs actuels même pour les routines d'exécution rapides... Plusieurs langages actuels génèrent un bytecode portable qui est proche de l'assembleur, mais est invisible au programmeur.

Autocode - 1952

Alick E. Glennie

Implémenté d'abord sur Mark 1 puis sur d'autres machines, c'est un code symbolique qui se traduit en langage machine.

FLOW-MATIC - 1955

Grace Hopper

Trouvant que la programmation en langage symbolique est inaccessible aux chercheurs, Grace Hopper à voulu utiliser des mots comme instructions pour l'UNIVAC I . Le langage sépare les instructions des structures de données ce qui était aussi nouveau. Un compilateur a été achevé en 1958.

IPL - 1956 - Information Processing Language

A. Newell, H. Simon, J.C. Shaw

Langage de traitement de listes, de bas niveau. Implémente la récursivité.

Fortran - 1954-1958 - FORmula TRANslator system

John Backus et autres chercheurs d’IBM

Langage dédié aux calculs mathématiques.
Fortran II en 1958 a introduit les sous-programmes les fonctions, les boucles, une structure de contrôle FOR primitif.
Les identifieurs avaient au plus six caractères.

UNCOL - 1958 - Universal Computer Oriented Language

Melvin E. Conway

C'est le premier bytecode, le premier langage intermédiaire, répondant au besoin de pouvoir écrire des programmes fonctionnant sur tous les matériels. Il n'a pas été implémenté mais a inspiré des projets ultérieurs comme l'UCSD p-System.

Lisp - 1958-1960 - LISt Processing

Mac Carthy

Langage fonctionnel de traitement de liste.
Il est récursif et non itératif. Les données et les programmes ne sont pas distingués et peuvent être traités de la même façon.

IAL - 1958 - International Algebraic Logic

Premier nom d’Algol 58, non implémenté.

ALGOL - 1960 / Algol W - 1966 / Algol 68 - ALGOrithmic

Language Défini par une commission internationale d'infomaticien coordonnée par l'IFIP

Algol Genie

C'est le premier langage universel indépendant de la machine.
Introduit la grammaire BNF (Backus Naur Form) pour réaliser un parseur de syntaxe.
Introduit la structure de bloc d’instructions et les variables locales aux blocs.
Introduit la récursivité (malgré les réticences car on considérait cela comme superflu!).
Il utilise des tableaux dynamiques, les langages suivants comme Pascal et C ont donc régressé en utilisant des tableaux statiques pour des raisons de performance.
On y trouve le IF THEN ELSE, un FOR assez général, le symbole d'affectation :=, un SWITCH avec des gotos, les délimiters BEGIN END, le WHILE..

L’Algol W de Niklaus Wirth en 1966 introduit les RECORD, les déclarations de structures de données dynamiques, le CASE, le passage de paramètres par valeur, la précédence des opérateurs.
La même année, Niklaus Wirth crée Euler, langage intermédiaire entre Algol et Pascal.

Algol 60 restait un langage orienté vers le calcul mathématique. Pour revenir à l'objectif de langage général, une nouvelle version à été décidée en 1964, l'Algol X, devenu ensuite Algol 68.
Algol 68 utilisait =+ pour combiner l'affectation et l'addition.  Il apportait la structure d'union et le cast de type.  Il ajoute un IF THEN ELIF FI, le CASE, le GOTO, des opérateurs définissables par l'utilisateur.
Il ne permettait pas le compilation séparée de fichiers (dite incrémentale).

COBOL - 1960 - COmmon Business Oriented Langage

Défini par un comité, la CODASYL, COnference on DAta SYsystems L anguages

Les travaux de la conférence, sous les auspices du Department Of Defense, avec des fabricants, uiversités et utilisateurs, ont duré de mai 1959 à avril 1960.
Grace Murray Hopper, qui avait défini Flow-Matic, un langage compilé dans les années 50, faisait partie du comité.
Langage procédural classique destiné à la gestion d’entreprise, dans lequel un programme est composé de 4 divisions: identification, environment, data, procedure, qui peuvent comporter des sections. Il est fondé sur les données et défini précisément le matériel et les formats d’entrées et sorties de données.
Il introduit la structure de donnée RECORD. Les programmes sont auto-documentés par la syntaxe, ce qui ne les rend pas plus légers!

APL - 1964 - A Programming Language

K. Iverson

Langage utilisant une notation mathématique, composé d’opérateurs. Un seul type, le tableau.
Défini entre 1957 et 1960 il a été implémenté en 1964.

BASIC - 1964 - Beginner’s All-purpose Symbolic Instruction Code

John Kemeny, Thomas Kurtz

Description

Il a été conçu, en 1963, pour être facile à apprendre, et implémenté en 1964. La première version était compilée, puis il est devenu interactif et interprété. Chaque ligne était numérotée pour permettre les branchements par GOTO!
Bill Gate et Paul Allen ont gagné un concours international en concevant l'implémentation d'un Basic performant, d'abord pour l'Altair (en 4 k. de mémoire) puis sur d'autre micro-ordinateurs.
Les micro-ordinateurs seront fournis avec un langage Basic en mémoire morte (ROM) jusqu'à la fin des années 80.
En 1977 les Apple II sont fournis avec un basic entier. Plus tard ils auront un basic Applesoft de Microsoft en virgule flottante. L'Applesoft à des identifieurs d'au plus deux caractères!, les branchements se font sur des numéros de lignes. Les sous-programmes sont appelés par un GOSUB sur un numéro de ligne.
Le premier PC d'IBM, sorti en 1981 utilise MS-DOS de Microsoft et son basic interprété (le Basica). En 82 Microsoft fournit un basic compilé (Quick Basic).
Pascal et le langage C se substitueront au Basic au cours de la même décennie, Microsoft fournit encore un basic compilé Visual Basic . ASP pour le web et les langages d'extension d'application (macro) sont en basic.
True Basic, par les auteurs originels est compilé et n'utilise plus les numéros de lignes.

ISWIM - 1966 - If You See What I Mean. (Si vous voyez ce que je veux dire).

P. Landin

Premier langage fonctionnel, au sens mathématique du terme. Le premier aussi à utiliser l'évaluation paresseuse (lazy evaluation).

Grammaires Attribuées - 1965

Donald Knuth

Complétant la méthode BNF, les grammaires attribuées (attribute grammar) décrivent la sémantique des langages sous forme de fonctions exécutables. Ce type de grammaire facilitera la réalisation de compilateurs.

Simula 67 - 1962-67

Ole-Johan Dahl, Kristan Nygaard

Le projet Simula a démarré en 1962. Le but était d'en faire un outil de description de système d'évènements discrets ou de réseau, et un langage de programmation de simulation.
Il était conçu comme une extension au langage Algol.
En 1964, Simula 1 était implémenté sur Univac 1107. Il a été utilisé alors pour contrôler des administrations, des aéroports, de la planification, du transport, ou un système social.
C'était alors un outil spécialisé.  En 1966 a été prise la décision d'en faire un langage universel. Plusieurs projets ont été lancés avec des constructeurs d'ordinateurs différents (Ibm, Univac, Digital) qui ont abouti à Simula 67.
Ce langage universel introduisait la notion de classes, de sous-classes et d’objets instances des classes. Les classes permettent d'associer les fonctions (méthodes) aux objets.

Logo - 1966

W. Fuerzeig, Seymour Papert, et autres

Destiné à apprendre la programmation aux enfants, il est proche de Lisp, et basé sur le déplacement d'une "tortue" sur l'écran.

SNOBOL 4 - 1967 - StroNg Oriented symBOlic Language

D.J. Farber, R.E. Griswold, F.P. Polensky au Bells Labs

Snobol est apparu en 1962.
Snobol 4 est la première version stable et distribuée de Snobol, en 1967.
C’est un langage de traitement de texte ou manipulation de chaînes de caractères, basé sur le principe de patterns, concaténation et alternation.
Il utilise essentiellement des tableaux et des tables. C'est le premier langage à implémenter des tableaux associatifs (dictionnaires) indexés par des clés de tous types.
Il est aussi le premier à implémenter le pattern-matching, sorte de switch case élaboré.
On peut , exécuter du code contenu dans des chaînes de caractères..
Les types sont: string, integer, real, array, table, pattern et types définis par l'utilisateur.

CPL - Combined Programming Language

Universités de Cambridge et Londres

C'est un mélange d'Algol 60 et de langage fonctionnel destiné à calculer la preuve de théorèmes. Il utilisait des structures de test polymorphiques. Langage typé avec un type joker "any". Types structurés liste et table.
Complexe, il n'a pas été implémenté.  Je le cite seulement parcequ'il a été un pas vers le langage C.

BCPL - 1965? - Basic CPL

Martin Richards

Ce langage se voulait une version simplifiée du CPL.
Il utilise les constructs FOR, LOOP, IF THEN, WHILE, UNTIL, REPEAT, REPEAT WHILE, SWITCH CASE, etc...
Il possède des procédures et des fonctions contrairement à C.
Les délimiteurs de block sont les symboles $( ..... $) qui ont sans doute inspiré les délimiteurs de commentaire du C: /* ... */

PL/1 - 1965? - Programming Language number One - Originellement NPL (New Programming Language)

IBM

Le langage a été conçu pour être général et modulaire.
Les mot-clés ne sont réservés que dans le contexte où on les utilise comme tels.
Il est plus indépendant du matériel que ses prédécesseurs. Ces types sont reconnus: fixed, real, complex, character, bit, bin, pointer, picture, file, etc.... Les variables ont des attributs par défaut (comme la précision parr exemple), qui dépend du contexte.
Ces types composés sont intégrés: array, structures, unions, et combinaisons d'entre eux. IF THEN et SELECT .. WHEN .. OTHERWISE sont les structures conditionnelles , et les variations de la structure DO permet des boucles conditionnelles.
Des classes de stockage sont introduites: automatic, static (pour la vie du programme), controlled, based. Les exceptions sont implémentées.

Pascal - 1970 - Du nom de Blaise Pascal, mathématicien français

Niklaus Wirth

Description

Langage conçu pour faciliter la réalisation des compilateurs et qui dirige l'enseignement de la programmation en obligeant à une programmation structurée.

L'UCSD Pascal est la première version sur micro ordinateur, réalisé par un groupe de programmeurs dirigé par Kenneth Bowles. Il compile les programmes en P-code, qui est interprété et portable (comme plus tard Java). Il comporte un environnement de développement complet, idée reprise avec succès par Turbo Pascal.
En 1981, un jeu de rôle écrit en Pascal, Wizardry, connait un grand succès sur Apple II.
C'est avec l'apparition de Turbo Pascal en 1983 (Anders hejlsberg), rapide et doté d'une IDE complète que le langage s'est répandu.
Les constructs sont proches du C. La façon de déclarer les variables plus lourde sans être forcément plus logique.

Forth - 1971 - Fourth réduit à Forth pour la contrainte de 5 lettres de l’IBM 1130

Charles H. Moore

Définit dans les années 60, implémenté apparemment en 71. 
Langage d’Astronomie qui utilise une pile à la place des variables.
Il se voulait langage de 4 ième génération, d'ou le nom.

Smalltalk - 1972

Alan Kay et le Software Concept Group

C'est un langage totalement orienté objet qui fonctionne à l'intérieur d'un environnement graphique, avec fenêtre, la souris. La notion de bitmap (1 pixel = 1 cellule de mémoire) est introduite.

C - 1973 - C succède à B, qui succède à BCPL

Dennis Ritchie

Description

C’est un langage destiné au départ à programmer le système d’exploitation UNIX, et qui est devenu rapidemment universel grâce à sa portabilité et ses performances..
Il permet la compilation de fichiers séparément.

En 1965, les programmeurs d'ATT utilisent le langage Bcpl pour travailler sur la r éalisation d'Unix. Insatisfaits du langage, ils l'ont fait évoluer dans une nouvelle version appelée B, puis dans un nouveau langage appelé C qui obtiendra le succès que l'on sait.
C'est surtout l'évolution du matériel qui a incité à créer le C. Les langages Bcpl et B utilisaient des entiers comme pointeurs, mais sur des machines conçues différemment, cela ne se pouvait plus.

Bcpl n'avait pas de type. Les déclarations du genre int i, char b ont été crées avec C. D'autres types sont apparus ensuite.

L'opérateur += vient d'Algol 68, mais cela s'écrivait plutôt =+
Bcpl plaçait un bloc d'instructions entre (* et *) comme un commentaire l'est entre /* et */ et une sous-expression entre ( et ). Je suppose que ce symbolisme veut dénoter le fait que que toute chose est une expression dans le langage, tout en accélérant le parsing. Le langage C simplifie avec les symboles { et }, ce qui enlève le sens originel.
Les notions d'union et cast viennent d'Algol 68.
L'opérateur ++ existait dans le langage B.
La directive "include" vient du PL/1.
Le préprocesseur à été implémenté en 1973 et l'utilisation effective à commencé, donc c'est à cette date que je place la création du langage C, même si la maturation à commencé à partir de 1969. Le langage à continué d'évoluer jusqu'en 1980. A partir de 73, C à été utilisé pour programmer le noyau d'Unix.

Prolog - 1970+

A. Colmerauer, D. Roussel

GNU Prolog

Le langage à été développé conjointement en France à Aix-en-Provence et à Edimburg. 
Il introduit la programmation logique. Un programme est composé de clauses de Horn.
Prolog se dit déclaratif parce que son système d'inférences logiques constitue un mécanisme de résolution.

SQL - 1970+ - Standard Query Language

IBM

Description

Langage d'interrogation de bases de données relationnelles. Il succède au langage Square.

Awk - 1974 - Selon les initiales des auteurs

Aho, Kerninghan, Weinberger

Langage de traitement de texte basé sur des expressions régulières, fonctionnant selon le principe pattern-action.

Scheme - 1975 - De "schemmer"

MIT - Gerald Jay Sussman et Guy L. Steele

Scheme

Langage dérivé de Lisp et épuré.
Les types sont les booléens, les entiers de taille indéfinie, rationnels ou complexes, les caractères ou les symboles, vecteurs, paires orientées, listes, listes associatives, tables de hachage. Le type générique S-expression permet d'étendre le langage.
Il est souvent utilisé comme langage de script par le logiciel Gimp notamment. 
Le langage et outil de développement Hop de l'Inria étend Scheme en un langage HTML fonctionnel permettant de construire des application Web 2.0.

CLU - 75 - CLUster

Barbara Liskov et le MIT.

Postérieur à Simula, il apporte la notion de constructeur de types abstrait doté du code pour le créer. Les objets sont appelés des clusters (groupes). Il apporte le concept d'itérateur, un système de gestion des exceptions efficace, l'assignement multiple. Ces idées ont été reprises par Python.

Plasma - 75

Carl Hewitt

Langage à acteurs. Implémenté en Lisp.

Sasl - 1976 - Saint Andrews Static Language

D. Turner

Destiné à apprendre la programmation fonctionnelle. 
Descend de Iswim, structures de données en nombre illimité.

Icon - 1970+

Griswold

Langage procédural, avec fonctions de traitement de texte comme Snobol4, et des constructs puissants. Sans doute le premier langage orienté buts: une instruction est exécutée si une expression doté d'un état succès ou échec est réalisée.
Il dispose de types structurés: liste, set, table (dictionnaire).
Une liste s'écrit: nom := [ "mot", "mot", nombre, etc...]
Une liste s'adresse avec un indice, comme a[i] ou par une gestion de pile.
Un set contient des éléments non doublés et dispose de fonctions d'union, intersection, suppression.
Le construct range s'écrit:    a to b
ou "to" est le mot-clé et "a" et "b" sont des variables..
On peut placer un range dans une expression ou comme argument d'une fonction. L'expression et la fonction seront appelés pour chaque valeur de l'intervalle.
 Ex: write(1 to 5) affichera 1, 2, 3, 4 ,5.
Les expressions ne retournent pas une valeur vraie ou fausse mais sont évaluées ou rejetée. Les opérations associées sont exécutées quand l'expression est évaluée. C'est le premier langage à évaluation des expressions dirigée par le but.
L'instruction du langage C:  si ( x= expression) ... qui signifie: assigner à x le résultat de l'expression, et si a est différent de zéro, alors..., cette construction est généralisée en Icon, si l'expression est évaluée, x prend sa valeur et la condition est remplie, sinon x n'est pas changé et la condition est passée.
Le construct every ... do associé à une expression fonctionne comme un itérateur. De même que le range.
L'alternation est un autre construct original puissant. Il permet d'utiliser une succession de paramètres, éventuellement jusqu'à obtention d'un résultat. Son symbole est "|".
Par exemple l'instruction: si a | b | c = 0 | 1 alors ....
se lit: si a ou b ou c vaut 0 ou 1 alors ...

ML - 1973? - Meta Language

R. Milner

Langage fonctionnel inspiré de Iswim.
Il avait pour but la preuve de théorème à l'université d'Edimbourg.
Les fonctions sont remplacées par des pattern models.
Implémenté en Lisp.

Modula 2 - 1979 - MODUlar LAnguage

Niklaus Wirth

Modula 1 aurait été défini en 1977.  Implémenté sur station de travail Lilith à l'origine.
L’idée du langage est de réduire le risque d’erreur avec des règles de programmation coercitives. Cependant, il se rapproche du langage C en tentant de combler les lacunes de Pascal. Ainsi, un appel de fonction sans paramètre s'écrit f() comme en C et non f comme en Pascal.
Il découpe un programme en modules contenant des routines et des structures de données, avec une visibilité locale, et avec des interfaces entre modules. Utilise des coroutines. Il apporte des fonctions d'accès au hardware pour concurrencer le C.
Il sera peu utilisé hors du cadre universitaire, parce que ces améliorations (modules, accès matériel), ont été ajoutés aux distributions de Pascal (avec notamment les units de Turbo Pascal).

Ada - 1980+ - Du prénom de Ada Byron de Lovelace, première femme à programmer

Créé par un groupe de travail dirigé par Jean Ichbiah, sur un cahier des charges du (DOD) Departement de la défense des USA

Inspiré par Pascal et Algol W.
Introduit la généricité des algorithmes et une sorte d’orientation objet primitive, il deviendra orienté objet par la suite après C++.
Introduit les paquetages, modules indépendants.

C++ - 1981-1986

Bjarne Stroustrup

Description

Langage orienté objets, selon le principe de Simula.
Introduit la surcharge des opérateurs. Les méthodes peuvent être inline.
A coté du symbole /* et */ pour enclore les commentaires, il utilise le symbole // pour un commentaire d'une ligne. On notera la réapparition d'un symbolisme qui existait déja dans le langage Bcpl, auquel le langage C à succédé!

Objective C, inventé par Brad Cox en 1984 est une autre version orientée objet de C qui s'inspire de smalltalk. Pas de surcharge des opérateurs.
Utilisé sur le défunt ordinateur Next et pour réaliser le système d'exploitation NextStep il est devenu le langage de programmation d'Apple avec le retour de Steve Jobs et donc celui des iPhones.

Standard ML - 1984

R. Milner, université d’Edimburgh et Cambridge, Inria.

Rechercher "Standard ML Moscow" sur moteur de recherche. Implémentation de ML.

Eiffel - 1985 - Du nom de Gustave Eiffel

Bertrand Meyer

Description

Langage procédural totalement orienté objet, implémente la persistence conçu pour la sécurité du logiciel.
Se compile en C. Peut s'interfacer avec d'autres langages. Il incorpore des éléments de langage fonctionnel, dispose de classes génériques, d'un garbage collector.
Une version dérivée existe en open source, Sather, (nom de la tour de Berkeley).

GAP - 1986 - Groups, Algorithms and Programming

Johannes Meier, Werner Nickel, Alice Niemeyer, Martin Schönert, et autres.

Le langage a été défini pour programmer des algorithmes mathématiques.
Il est interprété, interactif et non typé. Liste et records les structures de base.
La syntaxe s'inspire de Pascal avec des différence. Les commentaires sont insérés avec #.
Une fin de bloc est notée par inversion des mot-clés: if fi, do od.
La boucle for à la forme for in liste ou for from to.
Le langage distingue procédures et fonctions.
Ce qui le caractérise est que les variables pointent sur une valeur et non une adresse de mémoire, et la définition d'une fonction qui a la forme d'un appel: x := fonction(arguments) bloc.
On peut imbriquer une fonction dans une autre fonction.

Miranda - 1989 - Du nom d'une héroïne de Shakespeare (Miranda, admirable en latin)

D.Turner

Inspiré de Sasl et ML. Les arguments d’une fonction ne sont évalués qu’au moment ou ils sont utilisés (lazy evaluation). Pattern-matching imbriqué, modules.

Caml - 1987 - Categorical Abstract Machine Language

Suarez, Weiss, Maury

CAML

Caml et Objective caml en 1996, implémentent ML.

Perl - 1987 - Practical Extracting and Report Langage

Larry Wall

Destiné à remplacer les langages de ligne de commande d’Unix, Sh et Sed ainsi que Awk, il reprend la même (affreuse) syntaxe. Sert surtout à l'administration de système, et aux scripts CGI.
Utilise listes et tableaux associatifs (dictionnaires). Le construct FOREACH permet de parcourir le contenu de listes.

Oberon - 1988

Niklaus Wirth

Après Modula 2, l'auteur définit le langage Lilith en 1980 (sur machine Lilith), puis Oberon.
Plusieurs constructs d’usage commun sont supprimés afin de réduire encore le risque d’erreurs!  Un garbage collector est ajouté.

Haskell - 1990 - Prénom du logicien Haskell Curry

Langage élaboré par un comité pour les langages fonctionnels

Langage purement fonctionnel. Inspiré de Miranda, donc de Sasl.
Tableaux fonctionnels, pattern matching.

ABC - 1980-90 - ABC selon l'expression

CWI - Meertens, Pemberton (et Guido Van Rossum)

Langage de script mis au point par CWI aux Pays-bas et qui se voulait un successeur du Quick Basic ou des langages de script sous Unix.
Sans doute le premier à utiser l’indentation seule pour dénoter l’imbrication des procédures: il n’y a pas de délimiteurs comme begin/end ou équivalent.
Autre innovation, il n’y a pas de gestion de fichier, mais persistence des variables globales: elles conservent leur contenu d’une session à l’autre!
Il y a cinq types de base: nombre, chaîne, liste, composé (structure sans noms de champs), tableau.

Python - 1991 - Le nom vient de la série de télévision anglaise "Monty Python Flying Circus"

Guido Van Rossum

Description

Langage de script au typage dynamique. C'est une alternative à Perl.
S’inspire de ABC mais est extensible avec des modules en langage C et orienté objet.
Comme ABC il utilise des types évolués: tuple, liste, dictionnaire.
L'opérateur slice [a : b] permet d’extraire un sous-ensemble d’une liste.
Il existe une version qui compile en bytecode Java, jython et des versions pour .NET.

Pov-Ray - 1991 - Persistence Of Vision (titre d'un livre de science-fiction)

D. et A. Collins, et contributeurs

Pov-Ray est un langage de description d'images.

DisCo - 1992 - Distributed Co-operation

Reino Kurki-Suonio

Disco est un langage de spécification pour les systèmes réactifs, avec la syntaxe de Pascal. Les constructs du langage sont les objets, les fonctions commandées par évènements (appelées ici actions) et les relations. Une fonction est activée quand un état du système survient et peut-être surchargée. Disco est focalisé sur les interactions collectives. Les layers (couches, cadres) sont les modules du langage. C'est un language orienté-système avec objets et réactions (et non orienté-action comme il est dit dans la présentation).

Ruby - 1994 - Comme la pierre précieuse, par analogie avec Perl

Yukihiro Matsumoto

Description

Ruby a été conçu comme successeur à Perl et alternative à Python, pour être plus clair que le premier et plus orienté-objet que le second. La syntaxe s'inspire de ces deux langages, elle se veut intuitive et naturelle, mais peut être complexe.
Il n'y a pas de nouvelles structures de contrôle comme en Scriptol, mais une quantité d'innovations mineures qui réduisent la taille du code.
C'est un langage interprété, facilement extensible. Les instructions sont terminées par les fin de lignes. Les blocs d'instructions et les boucles sont terminées par "end". On retrouve la plupart des caractéristiques de Python: tableaux associatifs, iterateurs...
Son originalité est dans les objets dynamiques (ajout de méthodes aux instances) et dans le scope des variable dénoté par un préfixe.

Java - 1994 - Java se traduit par caoua, café

James Gosling et autres programmeurs chez Sun

Description

Conçu à l'origine, en 1991, comme un langage interactif, et nommé Oak, il n' aucun succès. Mais en 1994 il est réécrit pour Internet et renommé Java (café, caoua). En 1995 les navigateurs peuvent exécuter des applettes. En janvier 1996, Javasoft sort JDK 1.0, le Java Developpement Kit.
Java est un langage orienté objets inspiré de C++. Il se compile en bytecode, interprétable sur tout ordinateur. (Visual Café et GCJ produisent du code machine).
Il simplifie le C++: une classe par fichier, gestion automatique de la mémoire, pas de pointeurs. Il le restreint: pas d’héritage multiple ni de surcharge des opérateurs, mais il ajoute le multitâche intégré, la portabilité.
Java n'a que des tableaux dynamiques, au contraire de C et C++.

PHP - 1995 - Personal Home Pages Hypertext Processor

Rasmus Lerdorf

Description

Langage de script multi-plateformes, s'intégrant au HTML.
Similaire au langage C, non typé, les variables sont préfixées par le symbole $ comme sous le shell Unix ou Perl. Il parse des pages html incluant du code php et délivre une page en pur html.
Une librairie de fonctions étendue permet au Webmaster du créer des pages dynamiques et interactives.
Microsoft utilise sous Windows un langage équivalent, l'ASP, proche du basic.

JavaScript - 1995 (D'abord nommé LiveScript)

Brendan Eich à Netscape

Description

Language de scripts pour insérer du code procédural and les pages web.
Pour être utilisé dans d'autres applications, par exemples les languages basés sur XML.
Partage la syntaxe de C ou Java, mais avec des variables non typées. Les élements de la page web (window, table, etc...) sont accédés par l'intermédiaire du Document Object Model.

UML - 1996 - Unified Modeling Language

Standard par OMG (Object Management Group) - Grady Booch, Jim Rumbaugh, et Ivar Jacobson

UML est l'union de trois langages de modélisation conçus par les trois auteurs ci-dessus. Le langage utilise une notation graphique pour décrire des projets logiciels. Un source est un diagramme représentant des objects et leur interactions.Un modèle est fait de vues et leur combinaison décrit un système complet. Le modèle est abstrait et indépendant du domaine.

ECMAScript - 1997 - ECMA Script

Standard par le centre de normalisation européen E.C.M.A.

Description

Standard pour le langage JavaScript inventé par Netscape, pour rendre les pages web coté client dynamiques.

Rebol - 1997 (La définition est plus ancienne) - Relative Expression-Based Object Language

Carl SassenRath

Langage de scripts interprété utilisant un code compact. Il est destiné la communication sur Internet et les systèmes distribués. Il est extensible.
Comporte 45 types utilisant les mêmes opérateurs (ext: date, monnaie...). Les blocs d'instructions sont enclos entre [ ].

C# - 2000 - (C-sharp), note de musique, succède à C++ (synonyme de mélodie?)

Anders Hejlsberg / Microsoft.

Description

Ce langage est promis à un grand succès à partir de 2002. Il est le langage de base de la plateforme .NET, pour programmer des logiciels utilisable à distance sur Internet notamment. Comme Java, il reprend la syntaxe du langage C (qui a quand même 30 ans!) avec les mêmes simplifications: garbage collector, absence de pointeur, pas d'héritage multiple, interfaces, multi-tâche...

Le C# se compile en langage intermédiaire , le MSIL (MicroSoft Intermediate Language), et fonctionne avec une bibliothèque multi-langages, le CLR (Common Language Runtime). L'originalité essentielle est que des langages différents peuvent être compilés en MSIL et partager leurs classes.
 D'autres innovations ont été incluses au langage:
- les structs sont ici des objets spéciaux passés par valeur.
- Les littéraux sont des objets, avec des méthodes..
- Les attributs sont des objets descriptifs attachés aux éléments du programme et utilisés par le runtime.
- Les propriétés: une méthode définie comme propriété est utilisée comme une variable: prop = 5 est équivalent à prop(5).
- Le construct foreach() pour parcourir des tableaux (nouveau seulement par rapport au Java et au C++).
- Le delegate qui remplace le pointeur de fonctions du langage C.
Par rapport au Java, outre les différences ci-dessus:
- La gestion d'évènements est mieux intégrée.
- Il conserve la surcharge des opérateurs du C++
- Accès plus simple au système natif..

AspectJ - 2001 - Aspect for Java

Palo Alto Research Center

Description

Aspect J est une extension Java qui implémente la programmation orienté-aspect. Une technique qui modularise les "concerns" transversaux. Ici l'unité n'est pas la classe, mais un concern, qui se partage entre plusieurs classes. Les concern peuvent être des propriétés, des zones d'intérêt, d'un système et la POA décrit leurs relations, les compose ensemble dans une programme. Les aspects encapsulent un comportement commun à plusieurs classes.

Scriptol - Par Denis Sureau, 2001

Description

Scriptol (Scriptwriter Oriented Language) peut-être compilé en PHP, en C++ puis en binaire exécutable, ce qui lui donne une grande portabilité. C'est à la fois un langage d'applications, de scripts et de pages web.
Les blocs d'instructions et les structures de contrôle ne sont pas clos par "end" ou "}" mais, comme XML, avec la forme: "/if", "/for", " /while", etc...
Le langage dispose de nouvelles structures de controle: "for in", "while let", "scan by", etc... Le "if composite" facilite l'implémentation de règles.
Les variables et les litteraux sont des objets. On crée un objet primaire (nombre, texte, etc...) ou évolué par affectation directe d'une valeur ou d'une liste d'arguments au nom.
Scriptol est destiné à évoluer pour fournir, à coté des classes, d'autres structures de haut niveau et rapprocher la programmation de la pensée.
Depuis octobre 2003, scriptol permet d'utiliser XML comme structure de données interne.

Scala. Février 2004

Ecole Polytechnique Fédérale de Lausanne

Description

Scala est un langage purement orienté-objets qui implémente quelques caractéristiques de Python dans la syntaxe Java. Il est statiquement typé et à la fois procédural et fonctionnel. Il tourne actuellement sur JVM et .NET.

Go - Par Google, 2009

Description

Créé par Google pour ses propres développements mais placé dans le domaine public sous licence libre, il est conçu spécialement pour la vitesse de compilation.
C'est une version moderne de C++ sans les fichiers d'en-tête, avec une syntaxe simplifiée. Les classes sont remplacées par de simples interface et l'héritage a disparu.
Il apporte la concurrence et inclut un garbage collector mais aucun apport substanciel quand à la conception des langages de programmation.

Julia - 2010

Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman. Sponsorisé par la DARPA.

Description

Les auteurs ont voulu implémenter les meilleures fonctionnalités de tous les autres langages de programmation: objets, concurrence, homoiconicité, fonctionnement distribué, macros, généricité. Cela avec une syntaxe la plus concise et la plus claire possible. Julia fait avancer considérablement la programmation.
Le code Julia est compilé avec le JIT de LLVM et fonctionne comme un interpréteur.
Ses principaux domaines d'application sont les programmes scientifiques grâce à la bibliothèque étendu, le cloud avec le traitement distribué et concurrent, et grâce à la capacité d'un programme à se modifier lui-même, la robotique.

Dart - Par Google, 2011

Description

Destiné à remplacer JavaScript, que Google trouve entaché de défauts de conception irréparables (ce n'est pas l'avis de tous les acteurs du Web), il se rapproche de langages statiques comme Java, avec des classes dotées d'un héritage simple, des variables types ou dynamiques au choix. Il apporte des progrès dans les fonctionalités (concurrence, mixins, streams) mais constitue plutôt une régression dans le design par rapport à JavaScript dont les capacités dynamiques ont constitué une réelle évolution. La version 5 de JavaScript prévoit l'ajout de classes et héritage ce qui réduit l'intérêt de Dart dans le navigateur.

Rust - Par Mozilla, 2006-2011

Description

Ce langage système créé originellement par Graydon Hoare in 2006 et repris par Mozilla (son employeur) en 2009 dispose d'un compilateur depuis 2011. Sa syntaxe est dérivée de celle de C avec des additions pour gérer la concurrence et des additions syntaxiques. Il est orienté objet et générique avec des classes polymorphiques comme dans Haskell.
Il se veut plus sûr pour le Web et tirant mieux profit des processeurs actuels.

Asm.js - 2013 - By Mozilla

Description

Ce sous-ensemble de JavaScript permet en combinaison avec d'autre outils de convertir les applications et librairies écrites en d'autres langages et les utiliser sur le navigateur. Cela fait de celui-ci une interface universelle pour des logiciels en ligne ou hors ligne fonctionnant sur tous systèmes d'exploitation et tous types de matériels, de l'ordinateur de bureau au smartphone.

Swift - 2014 - By Apple

Description

Conçu pour remplacer Objective-C sur les appareils Apple et notamment l'iPhone et l'iTab il supprime une partie des défauts de ce langage ancien. Il a une conception classique et se distingue surtout en changeant le nom des éléments de langage, les interface devenant des protocoles, par exemple.

Du présent au futur

On voit qu'après la pléthore de dialectes des années 70, l'invention de langages à stagné quand à la syntaxe. Les langages courants, même récents comme Java, C#, PHP, n'apportent aucun changement aux instructions du traitement, Go et Dart sont même une régression. Seul Julia constitue une réelle avancée et exploite les capacités actuelles des ordinateurs.
L'usage de JavaScript se généralise en même temps que les applications Web offline.

Quelques tendances:

Conclusion

Le développement des mobiles avec leurs multiples systèmes d'exploitation favorisent HTML comme plateforme de développement, et les technologies associées: SVG, Canvas, CSS. JavaScript devient le langage dominant coté-client pour les applications en ligne.
D'autres tendances apparaissent dans les langages avec la programmation par aspects, ou par schémas tel UML, le traitement distribué sur le cloud...

Ressources et informations

Version originale en Janvier 2001 par Denis Sureau. Dernière mise à jour le 21 mars 2015.