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 dapplication
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.
- Langages machine.
- Langages symboliques et autocodes.
- Langages indépendants du matériel, comme Basic, C, Cobol, Algol...
- Langages conçus pour décrire le problème, comme Simula et autres langages à objets .
- 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).
- 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:
- Années 50: Création des langages de haut niveau (plus proches de l'homme).
- Années 60: Foisonnement de langages spécialisés.
Forth. Simula I. Lisp, Cobol.
On essaie sans succès d'imposer des langages généraux: Algol, PL/1. - Années 70: Duel entre programmation structurée avec Pascal et l'efficacité du langage C (cela dure encore en 2000). Généralisation du Basic interprété sur les micro-ordinateurs apparus en 1977, usqu'à la fin des années 80.
- Années 80: Expérimentation d'autres voies et notamment des objets. ML. Smalltalk. Sur les micro-ordinateurs, on utilise maintenant C, Pascal, Basic compilé.
- Années 90: Généralisation de la programmation objet grâce aux performances desmicro-ordinateurs. Java, Perl, Python s'ajoutent aux langages micros.
- Années 2000: Programmation Internet (et les innovations à venir, voir en fin de texte).
- Années 2010: Concurrence et asynchronisme. Les langages JavaScript, Go, Julia entre autre aident à créer des applications en ligne fluides.
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 // branchementLa 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 dIBM
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 dAlgol 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
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 dinstructions 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..
LAlgol 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 dentreprise,
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 dentré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é
dopérateurs. Un seul type, le tableau.
Défini entre 1957 et 1960 il a été implémenté
en 1964.
BASIC - 1964 - Beginners All-purpose Symbolic Instruction Code
John Kemeny, Thomas Kurtz
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 dobjets 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.
Cest 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
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 lIBM 1130
Charles H. Moore
Définit dans les années 60, implémenté
apparemment en 71.
Langage dAstronomie 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
Cest un langage destiné au départ à programmer
le système dexploitation 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
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
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
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.
Lidée du langage est de réduire le risque derreur
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
dorientation objet primitive, il deviendra orienté objet par
la suite après C++.
Introduit les paquetages, modules indépendants.
C++ - 1981-1986
Bjarne Stroustrup
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é dEdimburgh et Cambridge, Inria.
Rechercher "Standard ML Moscow" sur moteur de recherche. Implémentation de ML.
Eiffel - 1985 - Du nom de Gustave Eiffel
Bertrand Meyer
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 dune fonction ne sont évalués quau moment ou ils sont utilisés (lazy evaluation). Pattern-matching imbriqué, modules.
Caml - 1987 - Categorical Abstract Machine Language
Suarez, Weiss, Maury
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 dUnix, 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 dusage commun sont supprimés afin de
réduire encore le risque derreurs! 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 lindentation seule pour dénoter
limbrication des procédures: il ny a pas de délimiteurs
comme begin/end ou équivalent.
Autre innovation, il ny a pas de gestion de fichier, mais persistence
des variables globales: elles conservent leur contenu dune session
à lautre!
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
Langage de script au typage dynamique. C'est une alternative à
Perl.
Sinspire 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 dextraire un sous-ensemble
dune 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
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
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 dhé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
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
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.
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.
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
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
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
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
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.
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
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
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
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
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:
- Langages à objets
De 1992 à 2000, les concepteurs paraissent s'être consacrés à implémenter l'orientation objet sur tous les langages existants... Aucun nouveau langage d'application, mais apparition de langages Internet comme JavaScript, ASP, PHP, qui tendent à mêler données et fonctions de traitement.
Les classes tendent à être remplacées par des objets dynamiques et l'héritage par les combinaisons. - Langages simples
Il y a eu une tendance dans les années 2000 à la modernisation avec des langages de script. Python est le plus utilisé actuellement mais tend à être remplacé par Go. Ruby est surtout utilisé pour la bibliothèque Rail mais tend à être remplacé par Node et JavaScript. - Langages à balises
XML a été une tendance dans les années 2000-2010 mais depuis est confiné aux interfaces utilisateurs. Pour les documents, il tend à être remplacé par JSON.
Microsoft utilise XAML de façon très généralisée pour définir les interfaces graphiques. Sur le Web avec Silverlight, multi-navigateurs et localement avec .NET.
SVG est un format XML pour insérer du graphisme vectoriel dans une page web supporté par tous les navigateurs modernes. Il peut permettre de décrire une interface utilisateur. - Fausse route
La programmation par aspects, ou par schémas tel UML n'ont conduit nulle part.
- Portabilité.
Les langages deviennent plus portable grâce à LLVM et Emscriptem. Le premier pour sa machine virtuelle qui fonctionne sur tout système, le second en convertissant le code LLVM en JavaScript.
- SQL Les applications Web rendent le SQL de plus en plus incontournable en programmation moderne.
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.
Autre tendance: le traitement distribué sur le cloud...
Ressources et informations
- La liste complète Tous les langages de programmation par ordre alphabétique.
- Salut le Monde! Un exemple de programme minimal dans chaque langage.
- Histoire de l'ordinateur.
- Evolution des compilateurs. Comment la technique des parseurs s'est perfectionnée.
- Le futur des langages de programmation. Des idées nouvelles.
Version originale en Janvier 2001 par Denis Sureau. Dernière mise à jour le 14 mai 2015.