HISTOIRE DES LANGAGES INFORMATIQUE
2002 Jean Bellec
version partielle provisoire
noter que les hyperliens mentionnent des pages encore en construction, et que leur
existence ne fait que reflter l'avancement de cette version partielle et peut-tre
partiale de l'histoire informatique.
La programmation des machines
comme l'ASCC (Harvard MkI) ou les premires machines de gestion fut une opration de
cblage, la manire des automates industriels. IBM, Univac et Bull avaient
dvelopp le concept de tableau de connexion amovible qui avait l'avantage de ne
pas immobiliser le systme pendant le dveloppement d'un programme particulier. Ensuite,
ces constructeurs inventrent un concept de tableau secondaire pour garder des morceaux
de programme partags, un prdcesseur des sous programmes en quelque sorte. Ces
tableaux de connexion restrent le moyen de programmer les machines jusque vers 1955,
moment o les ordinateurs programme enregistr sortirent des laboratoires. La
programmation par panneaux de connexions garda des traces dans le milieu des programmeurs
d'applications de gestion o le concept de procdures avait du mal pntrer. Aussi,
naquirent les Gestions Automatiques de Programme (nom donn par IBM France au Report
Program Generator -RPG-) introduit sur les premiers petits ordinateurs de gestion
et dont la dernire version RPG3 fut le langage principal de programmation du System 38
et de l'AS/400.
Les machines programme enregistr drivent des concepts de von Neumann au dbut des annes 1950. La caractristique principale de ces machines qui restait conteste dans les annes 1960, mais s'imposa au moins partiellement par la suite, tait de banaliser la mmoire principale -mmoire tores ou tambour- entre donnes et programmes et de laisser envisager l'auto modification des programmes. L'usage de cette auto modification pouvait tre un gain de place en rutilisant comme constantes certaines parties du programme -source de pnibles mises au point au dbut des annes 1960,, ce pouvait aussi l'amorce d'une intelligence artificielle o le programme savait s'adapter aux pripties du calcul. En pratique, la principale utilisation de la banalisation de la mmoire a t la programmation automatique, c'est dire, la fabrication d'un programme partir d'un langage de programmation au moyen d'un autre programme qu'on appellera, probablement abusivement, un compilateur. L'abus de ce mot tait peut-tre que la fonction de traducteur de langage tait complment par la runion de sous-programmes ou de macro-instructions. Cette vision de la programmation automatique s'est peu prs impose au dbut des
annes 1960 (et dure encore de nos jours), il ne faut pas ignorer qu'une autre solution
avait t labore aussi peu prs simultanment, celle de l'interprtation d'un
langage de haut niveau. Le concept d'interprteur avait t utilis par Wilkes
en Grande Bretagne puis par IBM (S/360) et Bull (M-40 et Gamma 55) pour excuter un code
puissant et complexe au moyen d'une machine plus frustre et meilleur march. Les
microprogrammes de ces machines reprsentaient un interprteur. Cette solution
d'interprteur perdurera dans des machines surtout utilises interactivement, comme le
systme BASIC de Dartmouth et GE ou le PAF de Dimitri Starynkevitch la
CAB500 de SEA en France. Les premires bauches de langages et de compilateurs se heurtaient deux
problmes cruciaux cette poque de puissance de calcul rare et chre: l'encombrement
accru des programmes et la lenteur d'excution. La comparaison avec un simple Autocode
o chaque instruction de code source correspondait une instruction machine tait
notablement en dfaveur des langages et surtout des langages qui se voulaient
indpendants de la machine sous-jacente. Le traducteur de langage Autocode fut appel l'Assembleur.
Ce n'est pas un hasard si la dfinition par John Backus de FORTRAN, dont la
version intiale date de 1954, tait inspire par le code d'instructions de l'IBM 704.
FORTRAN continua son volution jusqu' nos jours avec le FORTRAN II, en 1957 qui
l'tablit comme langage standrad scientifique, FORTRAN IV en 1962, Fortran 77 normail
en avril 1978, puis Fortran 90 en 1991.
Aucun langage n'avait t conu pour l'accs direct aux donnes que permettaient les disques magntiques et les entres directes par terminaux. Les comits de normalisation de COBOL se contentrent d'ajouter des commandes (verbes) de positionnement dans les fichiers pour supporter les disques. Ce n'est pas un hasard si les transactions CICS ont trs longtemps t longtemps t programmes en macro-assembleur en y ajoutant des commandes spcifiques que d'autres constructeurs ajoutrent au COBOL pour supporter le transactionnel. COBOL continua d'tre amlior par le CODASYL sous les versions 1961, 1968 et 1974 et 1980. IBM, ne supportant COBOL qu' contre coeur, essaya en 1964 de faire avec PL/1 un langage universel en prenant ce qu'il y avait de mieux dans ALGOL et en lui ajoutant les plus de FORTRAN et de COBOL. PL/1 s'essaya mme traiter du temps rel et du transactionnel en dfinissant le concept de process sans trop en mesurer l'application relle. PL/1 traitant tous les formats de donnes et en particulier les chanes de bits tait un langage tentant pour rayer l'assembleur de l'offre logiciel. Le concepteurs de MULTICS, puis aprs eux ceux de Honeywell (PL/6 pour CP-6, puis pour GCOS8) et Bull (HPL pour GCOS64 et GCOS7) pour en faire un langage d'criture du systme d'exploitation. Au prix d'une certaine interprtation des spcifications de PL/1 et/ou d'une pince d'assembleur, le concept d'une programmation de systme en langage de haut niveau fut acquis. IBM, plutt que d'utiliser PL/1 pour ses nouveaux dveloppements, en dfinit un sous-ensemble plus efficient PL/S. Un autre dialecte de PL/1 qui eut son importance fut PL/M dvelopp en 1972 par Gary Kindall qui lui servit comme langage d'implmentation de CP/M. Plutt que de dformer PL/1 les concepteurs de UNIX autour de Ken Thompson aux Bell Laboratories prfrrent , partir de langages d'implmentation utiliss au MIT (CPL, BCPL et B) dvelopper en 1971 leur propre langage qui eut le succs que l'on sait, le langage C. Le plus clbre des compilateurs C, appel gcc, a t dans le cadre du projet GNU. Un langage original, Forth, bas entirement sur le concept de piles et de rcursivit, eut un certain succs la fin des donnes 1970. Il fut conu en 1969 comme langage de process control par Chuck Moore, un astronome. En fait, les concepteurs de langages cherchrent le plus souvent ce que tous les concepts utiles au programmeur soient dfinissables dans "leur" langage suivant ainsi la tentation d'imiter l'volution des langages naturels o cet utilisateur sans parler des Acadmies acceptent des mots trangers pour les nationaliser. L'ide d'utiliser plusieurs langages diffrents pour crire un mme programme est un concept quelque peu abscons pour un esprit occidental. C'tait cependant oublier qu'un programme est le plus souvent crit par plusieurs personnes et, qui pis est, des priodes diffrentes. Cette ncessit a d'abord t satisfaite par des extensions des concepts de sous-programmes et par des dfinitions rigoureuses des interfaces entre programmes (paramtres d'appel et de retour) spcification rigoureuse des donnes partages, par le concept de package apparu un peu plus tard. Il devint donc possible de ne pas recompiler le programme depuis la totalit de ses modules en code source, ce qui tait encore la rgle sous-entendue par certains langages, mais d'diter les liens entre modules par un processeur spcifique. Cette possibilit a t juge ncessaire par les concepteurs des systmes d'exploitation ds les annes 1960, bien que c'est seulement avec le dveloppement des langages orients objet que ce concept a t pris en compte par les concepteurs de langage. Une dformation des langages et de leurs compilateurs a t mis en oeuvre trs tt, c'est de faire prcder la compilation et mme le parsing par un traitement syntactique au niveau du code source permettant d'tendre volont le langage. L''utilisation de macroprocesseurs plus ou moins sophistiqus de l'INCLUDE de C jusqu'au traitement rcursif de TRAC et du MacProc de Bull, en passant a permis au programmeur COBOL d'crire des transactions ou de raliser une modularit spcifique -pas ncessairement rigoureuse, parce que non interprte l'excution. Parmi les langages nouveaux qui virent le jour une cadence plus faible partir des
annes 1975, il convient de citer ADA (1979),
langage soumis un concours par le Pentagone avec un objectif de remplacer JOVIAL , un
anctre de 1960, et de se substituer PL/1 en renforant le typage des donnes et la
solidit des interfaces. ADA vint trop tardivement pour s'imposer sur les main frames et
trop tt pour acqurir une place sur les micros trop peu puissants, l'poque. Il se
heurta la concurrence de C et dut se contenter la niche des systmes embarqus de
l'US Air Force o il vole oprationnellement au dessus des continents. Le concours de
spcification de ADA fut remport par l'quipe de Jean Ichbiah CII-HB. |
Pascal fut un langage
dfini en 1970 Zurich par le professeur Niklaus Wirth des fins pdagogiques: moins
complet que C, moins sujet la "programmation spaghetti" que BASIC,
n'exigeant pas de compilateur volumineux, il tait appropri aux micro-ordinateurs de
premire gnration. Pascal fut mme quelques temps vers 1980 un candidat pour
remplacer le systme d'exploitation de ceux-ci par un interprteur de P-code (UCSD). On
notera aussi la mme poque le succs de l'aventure Borland partir d'un
compilateur Pascal sur micros dont le prix menaa un temps le business de Microsoft.
L'augmentation de la taille de mmoire disponible lui fit cder la place C. L'quipe
Wirth essaya de prolonger le dveloppement de PASCAL avec Modula (1975)
C'est encore au cours des annes 1970 que fut invent le langage Smalltalk,
dvelopp au Xerox PARC par Alan Kay et Adele Goldberg. Ce langage ajoute l'esprit de
l'UCSD deux donnes importantes: la prise en compte d'un cran avec fentres (au lieu
du paradigme Teletype ou cartes perfores utilises jusqu'alors) et le concept d'objets
communiquant par messages. L'insuccs de Smalltalk repris par Digitalk eut comme raison
le caractre dogmatique excluant du systme les programmes non crits dans ce langage.
Les dfinitions de Smalltalk pour un langage orient objet, la dfinition de
l'hritage des variables et le concept de cration/destruction d'objet seront reprises
dans le produit industriel le plus important C++ invent par le danois Bjarne
Stroustrup aux Bell Laboratories en 1983 et qui a su coexister avec C -en utilisant le
compilateur C comme le traducteur du langage par le prprocesseur C++. Le succs de C et
de C++ doit beaucoup la disponibilit de la chane GNU dveloppe initialement au
MIT puis dans la communaut des logiciels libres. La gratuit de la chane de
fabrication a strilis les efforts faits par certains pour fournir une chane
comparable. Il faut toutefois signaler la grande antriorit (1964) du langage
norvgien SIMULA qui fut le pionnier des
langages orients objet.
Au milieu des annes 1980, une quipe de Sun autour de James Gosling se mirent tudier le problme de programmation des objets distribus interconnects sur Internet. En 1991, ils dvelopprent un langage nomm Oak. L'ide nouvelle tait de dvelopper un systme de programmation unique pour des objets d'architecture interne diffrente et dont les programmes devaient pouvoir tre tlchargs distance. Avant d'tre utiliss dans ce contexte, le concept fut tendu aux ordinateurs personnels dans le paradigme de "votre ordinateur est le rseau". ce langage est JAVA (introduit formellement en 1995) qui reprend l'essentiel des concepts de C ainsi que celui des langages interprts en standardisant le langage intermdiaire destin au tlchargement. Les premiers systmes Java fonctionnrent donc la manire de Basic et eurent des difficults s'imposer contre C pour des raisons de performances que ne contrebalanaient pas l'amlioration d la robustesse. La puissance des microprocesseurs et les tailles de mmoire augmentant, il devint possible d'imaginer la ralisation de compilateurs Java "Just in Time" qui transformaient le langage intermdiaire en code machine spcifique du type de microprocesseur chaque invocation du programme Java. Tout se passait comme s'il s'agissait d'une interprtation avec la rapidit d'un compilateur standard. JavaScript un dialecte sous-ensemble de Java devint rapidement le langage le plus rpandu dans les applications distribues du Web.
Une autre famille de langages est drive des interprteurs de commande eux-mme
drivs des antiques Job Control Languages des systmes de batch processing. Les JCL
taient devenus complexes et le besoin de paramtrage de ceux-ci par exemple par un jeu
de macros s'imposa. Ensuite l'intrt d'y introduire le concept de boucles fut reconnu.
Nous avions l'embryon d'un nouveau langage de programmation certes spcialis avec des
lments relativement ignors des langages plus "srieux".
Le PHP (1995) est un langage de programmation interprt invent en Scandinavie spcifiquement pour le dveloppement des applications distribues sur Internet. Alors que JAVA se plaait dlibrment comme langage client dans un modle client-serveur o le serveur tait un simple serveur de bases de donnes (machine SQL), PHP permet la programmation d'une application sur le serveur en utilisant un catalogue standard de ressources, suffisamment limit pour ne pas compromettre l'intgrit du serveur. Le succs de PHP actuellement est sans doute d son statut de "logiciel libre" associ au serveur Web Apache et au moteur de base de donnes MySQL.
Il reste parler de langages qui visaient des marchs particuliers ou du moins qui n'ont pas cherch en remplacer d'autres. Ces langages sont fonds sur des interprteurs. LISP a t dvelopp ds la fin des annes
1950 au MIT comme un langage automodifiable bas sur le traitement de listes.
L'ide de John McCarthy, dans la ligne de von Neumann, aura t de laisser
l'automate de base de l'interprteur la responsabilit de l'optimisation ou de la
recherche de convergence du processus dcrit par le programme LISP. Ce langage fut -avant
ALGOL- le premier admettre la rcursivit. Il fut aussi le premier tre
indpendant de la gestion de mmoire et ncessiter ce qu'on appellera la
"garbage collection". LOGO se Seymour Papert, en 1968, fut un essai de populariser les langages de programmation en ajoutant aux constructions de base de LISP des primitives graphiques. On notera aussi que les tableurs (Visicalc et EXCEL) dans lesquels ont t insrs de vritables programmes procdent de la mme logique d'interprtation que les processeurs d'intelligence artificielle. Leur convivialit empirique a eu beau jeu de leur permettre de s'imposer devant leurs anctres. APL invent par Ken Iverson IBM la fin des annes 1950 voulait un peu tre aux nombres ce que LISP tait aux chanes de caractre. L'utilisation d'un jeu de symboles mathmatiques non disponibles sur les claviers ordinaires a probablement t une des sources de son chec devant BASIC et les tableurs. Lui aussi est un langage interprt excutable sans traitement pralable par le moteur de la machine. Les ordinateurs se sont avrs capables d'excuter des oprations non seulement sur des nombres mais sur des variables symboliques. C'est ainsi que sont ns les langages Macsyma (Joel Moses au MIT en 1969), puis Maple (Universit de Waterloo en 1980) et Mathematica (Stephen Wolfram 1988) qui permettent les calculs mathmatiques sous forme algbrique aussi bien que sous leur expression numrique. On aura du mal classer EMACS dans les langages de programmation. Mais tout comme les tableurs il s'agit d'un processeur spcialis inspir de LISP qui a t progressivement tendu pour avoir ces capacits de programmation. Son dveloppement universitaire et sa diffusion dans le monde GNU a fait de Richard Stallman un auteur de programmes ayant marqu l'histoire de l'informatique. On n'a trait ici que des langages rpandus en dehors de leur quipe d'origine. A tous les langages diffusion restreinte dont certains ont t l'origine des langages mentionns ci-dessus (BCPL pour C, LIS pour ADA...) il convient d'ajouter ceux destins des applications particulires (MUMPS, TeX, Postscript) dont certains mritent qu'on leur accorde une place sidans l'histoire du logiciel. HISTOIRE et Commentaires sur les LANGAGES de PROGRAMMATION
ARTICLES
LINKS Computer Language History contenant un arbre de la filiation des langages de programmation ainsi que des liens vers des histoires particulires aux diffrents langages. |