Histoire et Evolution des Langages de Programmation

November 11, 2021 by No Comments

Histoire et Evolution
des Langages de Programmation

par D.G. Sureau

 

 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.org.

 

 Ce document est (c) 2000/2005 par D.G Sureau. Si vous désirez l’utiliser comme référence, vous pouvez mettre un lien sur ce site. Vous pouvez l’imprimer et le reproduire. Vous ne pouvez placer ce document sur un autre site.

 

 

 

 

 

 

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:

– 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, jusqu’à 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 des
micro-ordinateurs. Java, Perl, Python s’ajoutent aux langages micros.
– Années 2000: Programmation Internet (et les innovations à venir, voir en fin de texte).

 

Premier langage
 
 Ada Lovelace ainsi que Babbage et son neveu écrivaientt 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
Fsd   simtel
 Les assembleurs existent depuis le début des ordinateurs. Ils associent un nom symbolique au code du langage machine, par exemple:
add bx, 4          // Addition dans un registre
cmp [adr], 3     // Comparaison avec une variable
jmp address    // Saut à une adresse
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.

 

Autocoder – 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.

 

IPL – 1956
Information Processing Language
A Newell, H Simon, JC Shaw
Langage de traitement de listes, de bas niveau. Implémente la récursivité.

 

Fortran – 1954-1958
FORmula TRANslator system
Par John Backus et autres chercheurs d’IBM.
Fsd  (Dans gcc)
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.

 

Lisp – 1958-1960
LISt Processing
Mac Carthy
Fsd
 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.
(pas de compilateur en distribution)
 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 Languages.
Fsd
 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.
Fsd   simtel
 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
Fiche
 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 – 1965
I f 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
Fsd
 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 – 66
 
W Fuerzeig, S 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: /* … */

 

Pascal – 1970
Du nom de Blaise Pascal, mathématicien français.
Niklaus Wirth.
Fiche
 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.

 

Icon – 1970+
 
Griswold
 Langage procédural, avec fonctions de traitement de texte comme Snobol4, et des constructs puissants.
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 vaud 0 ou 1 alors …

 

Forth 1971
 

 

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

Charles H Moore
Forth.org      simtel
 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.
Fsd
 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.
Par Dennis Ritchie.
Fiche
  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.
Inria
 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
mySQL
 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
Fsd
  Langage de traitement de texte basé sur des expressions régulières, fonctionnant selon le principe pattern-action.

 

Scheme – 1975
De “schemmer”
MIT – G Steele, G Sussman
 Langage dérivé de Lisp, utilisé comme langage de script.

 

Plasma – 75
 

Carl Hewitt

 Langage à acteurs. Implémenté en Lisp.

 

Sasl – 1976
Saint Adrews Static Language
D Turner
 Destiné à apprendre la programmation fonctionnelle.
Descend de Iswim, structures de données en nombre illimité.

 

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
Fsd
 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 Departement de la défense des USA.
Fsd
 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.
Fiche
 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.

 

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
 

Bertrand Meyer

Fiche
 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
Groupe d’étudiants allemands, incluant Johannes Meier, Werner Nickel, Alice Niemeyer, et Martin Schönert
Gap Software
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
Inria
Caml et Objective caml en 1996, implémentent ML.

 

Perl – 1987
Practical Extracting and Report Langage.
Par Larry Wall, linguiste australien.
Perl
 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

Simtel
 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.
Haskell
 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)
CWI   Simtel
  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
Fiche
 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 une version pour .NET sur Active State.

 

 

Pov-Ray – 1991
Persistence Of Vision (titre d’un livre médiocre de science-fiction).
PovRay
 Pov-Ray est un langage de description d’images.

 

DisCo – 1992
Distributed Co-operation
Reino Kurki-Suonio
Disco
 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-Lang
  Populaire au Japon, Ruby a été conçu comme successeur à Perl et 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.

Fiche
  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 procédural classique inspiré du 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
Fiche
 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.

 

UML – 1996
Unified Modeling Language
Standard par OMG (Object Management Group) – Grady Booch, Jim Rumbaugh, and Ivar Jacobson
Ressources
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
Netscape – Standard from ECMA
More
Langage de construction de pages html dynamiques, coté client.
Inventé par Netscape.
Il est similaire à Java mais non typé et plus puissant, avec des caractéristiques communes avec Php.

 

Rebol – 1997 (La definition est plus ancienne)
Relative Expression-Based Object Language
Carl SassenRath
Rebol
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.
Fiche
 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
Fiche
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 – 2001
Scriptwriter Oriented Language
Denis. Sureau
Fiche
  Le plus récent, le plus puissant des langages de programmation procéduraux. Scriptol peut-être compilé en PHP, en C++ ou en 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.

 

E4X – June 2004
EcmaScript For Xml (E four X)
ECMA
Ecma
 E4X n’est pas un langage, mais une addition à un langage. De la même façon que Scriptol utilise Xml comme structure de données avec les instance de son propres Dom, E4X permet d’assigner Xml aux variable EcmaScript, et d’accéder aux élément par un indice ou un attribut.

 

 

Conclusion – Langage du futur 2000-2004
 
On voit qu’après la pléthode 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. Les capacités actuelles des ordinateurs ne sont pas exploitées.

Quelques tendances:

  • Langages simples.
    Il existe une tendance à la modernisation avec des langages de script comme Python , Ruby. NetRexx, Scriptol. Python est le plus utilisé actuellement. Scriptol est le plus universel.
  • Langages Internet
    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 JavaSript, ASP, PHP, qui tendent à mêler données et fonctions de traitement.
  • Langages Markup
    La tendance la plus récente est de transformer les documents xml en exécutables.
    – A partir de la version 4, Scriptol permet d’utiliser Xml comme structure de donnée intégrée aux sources, et accessible aux instructions du langage. Cela constitue un nouveau pas après la programmation orientée-objet.
    – Il y a au moins deux projets pour définir des instructions sous forme de balise à coté des données, et exécuter le code xml avec un interpréteur: SuperX++ et Steam-Water, qui utilise ConciseXml, un surensemble simplifié de xml.
    – Jelly, est un projet Apache pour imbriquer des instructions en xml comme JavaScript est imbriqué dans html.
    – Xul est un project Mozilla qui intègre JavaScript dans du code Xml pour définir des interfaces utilisateur graphiques. Pour l’instant cela ne s’affiche qu’avec Mozilla et Firefox.
    – Microsoft a dans ses cartons le projet Xen ou X#, une approche conservatrice qui sérialise une déclaration xml dans une classe que l’utilisateur doit concevoir pour cela.
    – XDuce ou CDuce est une tentative de réécriture de xml sous forme de blocs entre crochets avec quelques instructions de traitement – un retour en arrière.

Conclusion
La plateforme .Net peut faciliter l’intégration de code à l’intérieur des données, mais le Xml peut aussi être une alternative. Même si le C# tend à se populariser, ce sera grâce à la force de l’habitude, et comme successeur du C++ et de Java. .NET, en permettant d’utiliser des langages différents avec les librairies existantes, devrait favoriser l’apparition de nouveau langages, plus intéressant parce que plus proche de la pensée, beaucoup plus que ne le sont les langages actuels. La plateforme .Net utilise Xml en le convertissant en code orienté-objet. L’avenir est plutôt à l’utilisation de Xml directement comme structure de données.
D’autres tendances apparaissent dans les langages avec la programmation par aspects, ou par schémas tel UML…