Histoire et évolution des langages de programmation
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.
Critères de sélection: Un langage de programmation entre dans l'histoire s'il est largement utilisé ou s'il a inspiré d'autres langages de programmation. Des langages nouveaux et innovateurs sont aussi dans la liste.
Les langages de programmation généraux ont connu une évolution laborieuse et étrange depuis 1946. Pour montrer l'évolution de la syntaxe, des fonctionnalités, les voici classés par date d'implémentation. Quand Pascal, C++, Python, sont apparus, qui les a imaginés, pourquoi les langages ont-ils ces différences?
Les dates retenues correspondent au moment ou le premier programme à pu être écrit et compilé dans le langage. Il est fourni quand c'est possible le site d'un compilateur ou interpréteur pour le langage ou une fiche détaillée pour les principaux d'entre eux. L'historique concerne surtout les langages d’application ou de script universels, mais je mentionne certains langages spécialisés importants et tous ceux qui ont eu une influence majeure dans la conception ultérieure d'autres langages de programmation.
Si vous trouvez des erreurs ou des omissions, vous pouvez le dire: envoyez un commentaire à: webmaster@scriptol.fr.
Les principales catégories de langages (à ce jour), sont les langages fonctionnels et procéduraux (dits aussi impératifs), et les langages logiques.
Un langage est dit fonctionnel, au sens mathématique du mot fonction, si chaque opération est indépendante du contexte, et si le résultat d'une fonction dépend exclusivement de ses arguments.
Haskell, Lisp, sont des langages fonctionnels de genres différents. Ils sont plutôt destinés à l'intelligence artificielle. Lisp utilise le principe de réduction de problème, Prolog le principe de résolution par des prédicats de premier ordre, c'est un langage logique.
On oppose aussi le style impératif au style déclaratif. En fait on considère déclaratif un système qui énonce des connaissances, l'énoncé d'un problème, et fournit un mécanisme de résolution. Prolog se dit déclaratif.
Pratiquement tous les langages, fonctionnels ou impératifs sont maintenant orientés objets, et utilisent des classes décrivant des objets réels ou purement informatiques.
On distingue 4 générations de langages de programmation plus au moins deux nouvelles tendances.
Les dates retenues correspondent au moment ou le premier programme à pu être écrit et compilé dans le langage. Il est fourni quand c'est possible le site d'un compilateur ou interpréteur pour le langage ou une fiche détaillée pour les principaux d'entre eux. L'historique concerne surtout les langages d’application ou de script universels, mais je mentionne certains langages spécialisés importants et tous ceux qui ont eu une influence majeure dans la conception ultérieure d'autres langages de programmation.
Si vous trouvez des erreurs ou des omissions, vous pouvez le dire: envoyez un commentaire à: webmaster@scriptol.fr.
Les principales catégories de langages (à ce jour), sont les langages fonctionnels et procéduraux (dits aussi impératifs), et les langages logiques.
Un langage est dit fonctionnel, au sens mathématique du mot fonction, si chaque opération est indépendante du contexte, et si le résultat d'une fonction dépend exclusivement de ses arguments.
Haskell, Lisp, sont des langages fonctionnels de genres différents. Ils sont plutôt destinés à l'intelligence artificielle. Lisp utilise le principe de réduction de problème, Prolog le principe de résolution par des prédicats de premier ordre, c'est un langage logique.
On oppose aussi le style impératif au style déclaratif. En fait on considère déclaratif un système qui énonce des connaissances, l'énoncé d'un problème, et fournit un mécanisme de résolution. Prolog se dit déclaratif.
Pratiquement tous les langages, fonctionnels ou impératifs sont maintenant orientés objets, et utilisent des classes décrivant des objets réels ou purement informatiques.
On distingue 4 générations de langages de programmation plus au moins deux nouvelles tendances.
- 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.
- 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.
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:
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.
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.
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é.
A. Newell, H. Simon, J.C. Shaw
Langage de traitement de listes, de bas niveau. Implémente la récursivité.
Fortran - 1954-1958 - FORmula TRANslator system
John Backus et autres chercheurs d’IBM
Langage dédié aux calculs mathématiques.
Fortran II en 1958 a introduit les sous-programmes les fonctions, les boucles, une structure de contrôle FOR primitif.
Les identifieurs avaient au plus six caractères.
John Backus et autres chercheurs d’IBM
Langage dédié aux calculs mathématiques.
Fortran II en 1958 a introduit les sous-programmes les fonctions, les boucles, une structure de contrôle FOR primitif.
Les identifieurs avaient au plus six caractères.
UNCOL - 1958 - Universal Computer Oriented Language
Melvin E. Conway
C'est le premier bytecode, le premier langage intermédiaire, répondant au besoin de pouvoir écrire des programmes fonctionnant sur tous les matériels. Il n'a pas été implémenté mais a inspiré des projets ultérieurs comme l'UCSD p-System.
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.
Mac Carthy
Langage fonctionnel de traitement de liste.
Il est récursif et non itératif. Les données et les programmes ne sont pas distingués et peuvent être traités de la même façon.
IAL - 1958 - International Algebraic Logic
Premier nom d’Algol 58, non implémenté.
Premier nom d’Algol 58, non implémenté.
ALGOL - 1960 / Algol W - 1966 / Algol 68 - ALGOrithmic
Language Défini par une commission internationale d'infomaticien coordonnée par l'IFIP
Algol Genie
C'est le premier langage universel indépendant de la machine.
Introduit la grammaire BNF (Backus Naur Form) pour réaliser un parseur de syntaxe.
Introduit la structure de bloc d’instructions et les variables locales aux blocs.
Introduit la récursivité (malgré les réticences car on considérait cela comme superflu!).
Il utilise des tableaux dynamiques, les langages suivants comme Pascal et C ont donc régressé en utilisant des tableaux statiques pour des raisons de performance.
On y trouve le IF THEN ELSE, un FOR assez général, le symbole d'affectation :=, un SWITCH avec des gotos, les délimiters BEGIN END, le WHILE..
L’Algol W de Niklaus Wirth en 1966 introduit les RECORD, les déclarations de structures de données dynamiques, le CASE, le passage de paramètres par valeur, la précédence des opérateurs.
La même année, Niklaus Wirth crée Euler, langage intermédiaire entre Algol et Pascal.
Algol 60 restait un langage orienté vers le calcul mathématique. Pour revenir à l'objectif de langage général, une nouvelle version à été décidée en 1964, l'Algol X, devenu ensuite Algol 68.
Algol 68 utilisait =+ pour combiner l'affectation et l'addition. Il apportait la structure d'union et le cast de type. Il ajoute un IF THEN ELIF FI, le CASE, le GOTO, des opérateurs définissables par l'utilisateur.
Il ne permettait pas le compilation séparée de fichiers (dite incrémentale).
Language Défini par une commission internationale d'infomaticien coordonnée par l'IFIP
Algol Genie
C'est le premier langage universel indépendant de la machine.
Introduit la grammaire BNF (Backus Naur Form) pour réaliser un parseur de syntaxe.
Introduit la structure de bloc d’instructions et les variables locales aux blocs.
Introduit la récursivité (malgré les réticences car on considérait cela comme superflu!).
Il utilise des tableaux dynamiques, les langages suivants comme Pascal et C ont donc régressé en utilisant des tableaux statiques pour des raisons de performance.
On y trouve le IF THEN ELSE, un FOR assez général, le symbole d'affectation :=, un SWITCH avec des gotos, les délimiters BEGIN END, le WHILE..
L’Algol W de Niklaus Wirth en 1966 introduit les RECORD, les déclarations de structures de données dynamiques, le CASE, le passage de paramètres par valeur, la précédence des opérateurs.
La même année, Niklaus Wirth crée Euler, langage intermédiaire entre Algol et Pascal.
Algol 60 restait un langage orienté vers le calcul mathématique. Pour revenir à l'objectif de langage général, une nouvelle version à été décidée en 1964, l'Algol X, devenu ensuite Algol 68.
Algol 68 utilisait =+ pour combiner l'affectation et l'addition. Il apportait la structure d'union et le cast de type. Il ajoute un IF THEN ELIF FI, le CASE, le GOTO, des opérateurs définissables par l'utilisateur.
Il ne permettait pas le compilation séparée de fichiers (dite incrémentale).
COBOL - 1960 - COmmon Business Oriented Langage
Défini par un comité, la CODASYL, COnference on DAta SYsystems L anguages
Les travaux de la conférence, sous les auspices du Department Of Defense, avec des fabricants, uiversités et utilisateurs, ont duré de mai 1959 à avril 1960.
Grace Murray Hopper, qui avait défini Flow-Matic, un langage compilé dans les années 50, faisait partie du comité.
Langage procédural classique destiné à la gestion d’entreprise, dans lequel un programme est composé de 4 divisions: identification, environment, data, procedure, qui peuvent comporter des sections. Il est fondé sur les données et défini précisément le matériel et les formats d’entrées et sorties de données.
Il introduit la structure de donnée RECORD. Les programmes sont auto-documentés par la syntaxe, ce qui ne les rend pas plus légers!
Défini par un comité, la CODASYL, COnference on DAta SYsystems L anguages
Les travaux de la conférence, sous les auspices du Department Of Defense, avec des fabricants, uiversités et utilisateurs, ont duré de mai 1959 à avril 1960.
Grace Murray Hopper, qui avait défini Flow-Matic, un langage compilé dans les années 50, faisait partie du comité.
Langage procédural classique destiné à la gestion d’entreprise, dans lequel un programme est composé de 4 divisions: identification, environment, data, procedure, qui peuvent comporter des sections. Il est fondé sur les données et défini précisément le matériel et les formats d’entrées et sorties de données.
Il introduit la structure de donnée RECORD. Les programmes sont auto-documentés par la syntaxe, ce qui ne les rend pas plus légers!
APL - 1964 - A Programming Language
K. Iverson
Langage utilisant une notation mathématique, composé d’opérateurs. Un seul type, le tableau.
Défini entre 1957 et 1960 il a été implémenté en 1964.
K. Iverson
Langage utilisant une notation mathématique, composé d’opérateurs. Un seul type, le tableau.
Défini entre 1957 et 1960 il a été implémenté en 1964.
BASIC - 1964 - Beginner’s All-purpose Symbolic Instruction Code
John Kemeny, Thomas Kurtz
Description
Il a été conçu, en 1963, pour être facile à apprendre, et implémenté en 1964. La première version était compilée, puis il est devenu interactif et interprété. Chaque ligne était numérotée pour permettre les branchements par GOTO!
Bill Gate et Paul Allen ont gagné un concours international en concevant l'implémentation d'un Basic performant, d'abord pour l'Altair (en 4 k. de mémoire) puis sur d'autre micro-ordinateurs.
Les micro-ordinateurs seront fournis avec un langage Basic en mémoire morte (ROM) jusqu'à la fin des années 80.
En 1977 les Apple II sont fournis avec un basic entier. Plus tard ils auront un basic Applesoft de Microsoft en virgule flottante. L'Applesoft à des identifieurs d'au plus deux caractères!, les branchements se font sur des numéros de lignes. Les sous-programmes sont appelés par un GOSUB sur un numéro de ligne.
Le premier PC d'IBM, sorti en 1981 utilise MS-DOS de Microsoft et son basic interprété (le Basica). En 82 Microsoft fournit un basic compilé (Quick Basic).
Pascal et le langage C se substitueront au Basic au cours de la même décennie, Microsoft fournit encore un basic compilé Visual Basic . ASP pour le web et les langages d'extension d'application (macro) sont en basic.
True Basic, par les auteurs originels est compilé et n'utilise plus les numéros de lignes.
John Kemeny, Thomas Kurtz
Description
Il a été conçu, en 1963, pour être facile à apprendre, et implémenté en 1964. La première version était compilée, puis il est devenu interactif et interprété. Chaque ligne était numérotée pour permettre les branchements par GOTO!
Bill Gate et Paul Allen ont gagné un concours international en concevant l'implémentation d'un Basic performant, d'abord pour l'Altair (en 4 k. de mémoire) puis sur d'autre micro-ordinateurs.
Les micro-ordinateurs seront fournis avec un langage Basic en mémoire morte (ROM) jusqu'à la fin des années 80.
En 1977 les Apple II sont fournis avec un basic entier. Plus tard ils auront un basic Applesoft de Microsoft en virgule flottante. L'Applesoft à des identifieurs d'au plus deux caractères!, les branchements se font sur des numéros de lignes. Les sous-programmes sont appelés par un GOSUB sur un numéro de ligne.
Le premier PC d'IBM, sorti en 1981 utilise MS-DOS de Microsoft et son basic interprété (le Basica). En 82 Microsoft fournit un basic compilé (Quick Basic).
Pascal et le langage C se substitueront au Basic au cours de la même décennie, Microsoft fournit encore un basic compilé Visual Basic . ASP pour le web et les langages d'extension d'application (macro) sont en basic.
True Basic, par les auteurs originels est compilé et n'utilise plus les numéros de lignes.
ISWIM - 1966 - If You See What I Mean. (Si vous voyez ce que je veux dire).
P. Landin
Premier langage fonctionnel, au sens mathématique du terme. Le premier aussi à utiliser l'évaluation paresseuse (lazy evaluation).
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.
Donald Knuth
Complétant la méthode BNF, les grammaires attribuées (attribute grammar) décrivent la sémantique des langages sous forme de fonctions exécutables. Ce type de grammaire facilitera la réalisation de compilateurs.
Simula 67 - 1962-67
Ole-Johan Dahl, Kristan Nygaard
Le projet Simula a démarré en 1962. Le but était d'en faire un outil de description de système d'évènements discrets ou de réseau, et un langage de programmation de simulation.
Il était conçu comme une extension au langage Algol.
En 1964, Simula 1 était implémenté sur Univac 1107. Il a été utilisé alors pour contrôler des administrations, des aéroports, de la planification, du transport, ou un système social.
C'était alors un outil spécialisé. En 1966 a été prise la décision d'en faire un langage universel. Plusieurs projets ont été lancés avec des constructeurs d'ordinateurs différents (Ibm, Univac, Digital) qui ont abouti à Simula 67.
Ce langage universel introduisait la notion de classes, de sous-classes et d’objets instances des classes. Les classes permettent d'associer les fonctions (méthodes) aux objets.
Ole-Johan Dahl, Kristan Nygaard
Le projet Simula a démarré en 1962. Le but était d'en faire un outil de description de système d'évènements discrets ou de réseau, et un langage de programmation de simulation.
Il était conçu comme une extension au langage Algol.
En 1964, Simula 1 était implémenté sur Univac 1107. Il a été utilisé alors pour contrôler des administrations, des aéroports, de la planification, du transport, ou un système social.
C'était alors un outil spécialisé. En 1966 a été prise la décision d'en faire un langage universel. Plusieurs projets ont été lancés avec des constructeurs d'ordinateurs différents (Ibm, Univac, Digital) qui ont abouti à Simula 67.
Ce langage universel introduisait la notion de classes, de sous-classes et d’objets instances des classes. Les classes permettent d'associer les fonctions (méthodes) aux objets.
Logo - 1966
W. Fuerzeig, Seymour Papert, et autres
Destiné à apprendre la programmation aux enfants, il est proche de Lisp, et basé sur le déplacement d'une "tortue" sur l'écran.
W. Fuerzeig, Seymour Papert, et autres
Destiné à apprendre la programmation aux enfants, il est proche de Lisp, et basé sur le déplacement d'une "tortue" sur l'écran.
SNOBOL 4 - 1967 - StroNg Oriented symBOlic Language
D.J. Farber, R.E. Griswold, F.P. Polensky au Bells Labs
Snobol est apparu en 1962.
Snobol 4 est la première version stable et distribuée de Snobol, en 1967.
C’est un langage de traitement de texte ou manipulation de chaînes de caractères, basé sur le principe de patterns, concaténation et alternation.
Il utilise essentiellement des tableaux et des tables. C'est le premier langage à implémenter des tableaux associatifs (dictionnaires) indexés par des clés de tous types.
Il est aussi le premier à implémenter le pattern-matching, sorte de switch case élaboré.
On peut , exécuter du code contenu dans des chaînes de caractères..
Les types sont: string, integer, real, array, table, pattern et types définis par l'utilisateur.
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.
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: /* ... */
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.
IBM
Le langage a été conçu pour être général et modulaire.
Les mot-clés ne sont réservés que dans le contexte où on les utilise comme tels.
Il est plus indépendant du matériel que ses prédécesseurs. Ces types sont reconnus: fixed, real, complex, character, bit, bin, pointer, picture, file, etc.... Les variables ont des attributs par défaut (comme la précision parr exemple), qui dépend du contexte.
Ces types composés sont intégrés: array, structures, unions, et combinaisons d'entre eux. IF THEN et SELECT .. WHEN .. OTHERWISE sont les structures conditionnelles , et les variations de la structure DO permet des boucles conditionnelles.
Des classes de stockage sont introduites: automatic, static (pour la vie du programme), controlled, based. Les exceptions sont implémentées.
Pascal - 1970 - Du nom de Blaise Pascal, mathématicien français
Niklaus Wirth
Description
Langage conçu pour faciliter la réalisation des compilateurs et qui dirige l'enseignement de la programmation en obligeant à une programmation structurée.
L'UCSD Pascal est la première version sur micro ordinateur, réalisé par un groupe de programmeurs dirigé par Kenneth Bowles. Il compile les programmes en P-code, qui est interprété et portable (comme plus tard Java). Il comporte un environnement de développement complet, idée reprise avec succès par Turbo Pascal.
En 1981, un jeu de rôle écrit en Pascal, Wizardry, connait un grand succès sur Apple II.
C'est avec l'apparition de Turbo Pascal en 1983 (Anders hejlsberg), rapide et doté d'une IDE complète que le langage s'est répandu.
Les constructs sont proches du C. La façon de déclarer les variables plus lourde sans être forcément plus logique.
Niklaus Wirth
Description
Langage conçu pour faciliter la réalisation des compilateurs et qui dirige l'enseignement de la programmation en obligeant à une programmation structurée.
L'UCSD Pascal est la première version sur micro ordinateur, réalisé par un groupe de programmeurs dirigé par Kenneth Bowles. Il compile les programmes en P-code, qui est interprété et portable (comme plus tard Java). Il comporte un environnement de développement complet, idée reprise avec succès par Turbo Pascal.
En 1981, un jeu de rôle écrit en Pascal, Wizardry, connait un grand succès sur Apple II.
C'est avec l'apparition de Turbo Pascal en 1983 (Anders hejlsberg), rapide et doté d'une IDE complète que le langage s'est répandu.
Les constructs sont proches du C. La façon de déclarer les variables plus lourde sans être forcément plus logique.
Forth - 1971 - Fourth réduit à Forth pour la contrainte de 5 lettres de l’IBM 1130
Charles H. Moore
Définit dans les années 60, implémenté apparemment en 71.
Langage d’Astronomie qui utilise une pile à la place des variables.
Il se voulait langage de 4 ième génération, d'ou le nom.
Charles H. Moore
Définit dans les années 60, implémenté apparemment en 71.
Langage d’Astronomie qui utilise une pile à la place des variables.
Il se voulait langage de 4 ième génération, d'ou le nom.
Smalltalk - 1972
Alan Kay et le Software Concept Group
C'est un langage totalement orienté objet qui fonctionne à l'intérieur d'un environnement graphique, avec fenêtre, la souris. La notion de bitmap (1 pixel = 1 cellule de mémoire) est introduite.
Alan Kay et le Software Concept Group
C'est un langage totalement orienté objet qui fonctionne à l'intérieur d'un environnement graphique, avec fenêtre, la souris. La notion de bitmap (1 pixel = 1 cellule de mémoire) est introduite.
C - 1973 - C succède à B, qui succède à BCPL
Dennis Ritchie
Description
C’est un langage destiné au départ à programmer le système d’exploitation UNIX, et qui est devenu rapidemment universel grâce à sa portabilité et ses performances..
Il permet la compilation de fichiers séparément.
En 1965, les programmeurs d'ATT utilisent le langage Bcpl pour travailler sur la r éalisation d'Unix. Insatisfaits du langage, ils l'ont fait évoluer dans une nouvelle version appelée B, puis dans un nouveau langage appelé C qui obtiendra le succès que l'on sait.
C'est surtout l'évolution du matériel qui a incité à créer le C. Les langages Bcpl et B utilisaient des entiers comme pointeurs, mais sur des machines conçues différemment, cela ne se pouvait plus.
Bcpl n'avait pas de type. Les déclarations du genre int i, char b ont été crées avec C. D'autres types sont apparus ensuite.
L'opérateur += vient d'Algol 68, mais cela s'écrivait plutôt =+
Bcpl plaçait un bloc d'instructions entre (* et *) comme un commentaire l'est entre /* et */ et une sous-expression entre ( et ). Je suppose que ce symbolisme veut dénoter le fait que que toute chose est une expression dans le langage, tout en accélérant le parsing. Le langage C simplifie avec les symboles { et }, ce qui enlève le sens originel.
Les notions d'union et cast viennent d'Algol 68.
L'opérateur ++ existait dans le langage B.
La directive "include" vient du PL/1.
Le préprocesseur à été implémenté en 1973 et l'utilisation effective à commencé, donc c'est à cette date que je place la création du langage C, même si la maturation à commencé à partir de 1969. Le langage à continué d'évoluer jusqu'en 1980. A partir de 73, C à été utilisé pour programmer le noyau d'Unix.
Dennis Ritchie
Description
C’est un langage destiné au départ à programmer le système d’exploitation UNIX, et qui est devenu rapidemment universel grâce à sa portabilité et ses performances..
Il permet la compilation de fichiers séparément.
En 1965, les programmeurs d'ATT utilisent le langage Bcpl pour travailler sur la r éalisation d'Unix. Insatisfaits du langage, ils l'ont fait évoluer dans une nouvelle version appelée B, puis dans un nouveau langage appelé C qui obtiendra le succès que l'on sait.
C'est surtout l'évolution du matériel qui a incité à créer le C. Les langages Bcpl et B utilisaient des entiers comme pointeurs, mais sur des machines conçues différemment, cela ne se pouvait plus.
Bcpl n'avait pas de type. Les déclarations du genre int i, char b ont été crées avec C. D'autres types sont apparus ensuite.
L'opérateur += vient d'Algol 68, mais cela s'écrivait plutôt =+
Bcpl plaçait un bloc d'instructions entre (* et *) comme un commentaire l'est entre /* et */ et une sous-expression entre ( et ). Je suppose que ce symbolisme veut dénoter le fait que que toute chose est une expression dans le langage, tout en accélérant le parsing. Le langage C simplifie avec les symboles { et }, ce qui enlève le sens originel.
Les notions d'union et cast viennent d'Algol 68.
L'opérateur ++ existait dans le langage B.
La directive "include" vient du PL/1.
Le préprocesseur à été implémenté en 1973 et l'utilisation effective à commencé, donc c'est à cette date que je place la création du langage C, même si la maturation à commencé à partir de 1969. Le langage à continué d'évoluer jusqu'en 1980. A partir de 73, C à été utilisé pour programmer le noyau d'Unix.
Prolog - 1970+
A. Colmerauer, D. Roussel
GNU Prolog
Le langage à été développé conjointement en France à Aix-en-Provence et à Edimburg.
Il introduit la programmation logique. Un programme est composé de clauses de Horn.
Prolog se dit déclaratif parce que son système d'inférences logiques constitue un mécanisme de résolution.
A. Colmerauer, D. Roussel
GNU Prolog
Le langage à été développé conjointement en France à Aix-en-Provence et à Edimburg.
Il introduit la programmation logique. Un programme est composé de clauses de Horn.
Prolog se dit déclaratif parce que son système d'inférences logiques constitue un mécanisme de résolution.
SQL - 1970+ - Standard Query Language
IBM
Description
Langage d'interrogation de bases de données relationnelles. Il succède au langage Square.
IBM
Description
Langage d'interrogation de bases de données relationnelles. Il succède au langage Square.
Awk - 1974 - Selon les initiales des auteurs
Aho, Kerninghan, Weinberger
Langage de traitement de texte basé sur des expressions régulières, fonctionnant selon le principe pattern-action.
Aho, Kerninghan, Weinberger
Langage de traitement de texte basé sur des expressions régulières, fonctionnant selon le principe pattern-action.
Scheme - 1975 - De "schemmer"
MIT - Gerald Jay Sussman et Guy L. Steele
Scheme
Langage dérivé de Lisp et épuré.
Les types sont les booléens, les entiers de taille indéfinie, rationnels ou complexes, les caractères ou les symboles, vecteurs, paires orientées, listes, listes associatives, tables de hachage. Le type générique S-expression permet d'étendre le langage.
Il est souvent utilisé comme langage de script par le logiciel Gimp notamment.
Le langage et outil de développement Hop de l'Inria étend Scheme en un langage HTML fonctionnel permettant de construire des application Web 2.0.
MIT - Gerald Jay Sussman et Guy L. Steele
Scheme
Langage dérivé de Lisp et épuré.
Les types sont les booléens, les entiers de taille indéfinie, rationnels ou complexes, les caractères ou les symboles, vecteurs, paires orientées, listes, listes associatives, tables de hachage. Le type générique S-expression permet d'étendre le langage.
Il est souvent utilisé comme langage de script par le logiciel Gimp notamment.
Le langage et outil de développement Hop de l'Inria étend Scheme en un langage HTML fonctionnel permettant de construire des application Web 2.0.
CLU - 75 - CLUster
Barbara Liskov et le MIT.
Postérieur à Simula, il apporte la notion de constructeur de types abstrait doté du code pour le créer. Les objets sont appelés des clusters (groupes). Il apporte le concept d'itérateur, un système de gestion des exceptions efficace, l'assignement multiple. Ces idées ont été reprises par Python.
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.
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é.
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 ...
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.
R. Milner
Langage fonctionnel inspiré de Iswim.
Il avait pour but la preuve de théorème à l'université d'Edimbourg.
Les fonctions sont remplacées par des pattern models.
Implémenté en Lisp.
Modula 2 - 1979 - MODUlar LAnguage
Niklaus Wirth
Modula 1 aurait été défini en 1977. Implémenté sur station de travail Lilith à l'origine.
L’idée du langage est de réduire le risque d’erreur avec des règles de programmation coercitives. Cependant, il se rapproche du langage C en tentant de combler les lacunes de Pascal. Ainsi, un appel de fonction sans paramètre s'écrit f() comme en C et non f comme en Pascal.
Il découpe un programme en modules contenant des routines et des structures de données, avec une visibilité locale, et avec des interfaces entre modules. Utilise des coroutines. Il apporte des fonctions d'accès au hardware pour concurrencer le C.
Il sera peu utilisé hors du cadre universitaire, parce que ces améliorations (modules, accès matériel), ont été ajoutés aux distributions de Pascal (avec notamment les units de Turbo Pascal).
Niklaus Wirth
Modula 1 aurait été défini en 1977. Implémenté sur station de travail Lilith à l'origine.
L’idée du langage est de réduire le risque d’erreur avec des règles de programmation coercitives. Cependant, il se rapproche du langage C en tentant de combler les lacunes de Pascal. Ainsi, un appel de fonction sans paramètre s'écrit f() comme en C et non f comme en Pascal.
Il découpe un programme en modules contenant des routines et des structures de données, avec une visibilité locale, et avec des interfaces entre modules. Utilise des coroutines. Il apporte des fonctions d'accès au hardware pour concurrencer le C.
Il sera peu utilisé hors du cadre universitaire, parce que ces améliorations (modules, accès matériel), ont été ajoutés aux distributions de Pascal (avec notamment les units de Turbo Pascal).
Ada - 1980+ - Du prénom de Ada Byron de Lovelace, première femme à programmer
Créé par un groupe de travail dirigé par Jean Ichbiah, sur un cahier des charges du (DOD) Departement de la défense des USA
Inspiré par Pascal et Algol W.
Introduit la généricité des algorithmes et une sorte d’orientation objet primitive, il deviendra orienté objet par la suite après C++.
Introduit les paquetages, modules indépendants.
Créé par un groupe de travail dirigé par Jean Ichbiah, sur un cahier des charges du (DOD) Departement de la défense des USA
Inspiré par Pascal et Algol W.
Introduit la généricité des algorithmes et une sorte d’orientation objet primitive, il deviendra orienté objet par la suite après C++.
Introduit les paquetages, modules indépendants.
C++ - 1981-1986
Bjarne Stroustrup
Description
Langage orienté objets, selon le principe de Simula.
Introduit la surcharge des opérateurs. Les méthodes peuvent être inline.
A coté du symbole /* et */ pour enclore les commentaires, il utilise le symbole // pour un commentaire d'une ligne. On notera la réapparition d'un symbolisme qui existait déja dans le langage Bcpl, auquel le langage C à succédé!
Objective C, inventé par Brad Cox en 1984 est une autre version orientée objet de C qui s'inspire de smalltalk. Pas de surcharge des opérateurs.
Utilisé sur le défunt ordinateur Next et pour réaliser le système d'exploitation NextStep il est devenu le langage de programmation d'Apple avec le retour de Steve Jobs et donc celui des iPhones.
Bjarne Stroustrup
Description
Langage orienté objets, selon le principe de Simula.
Introduit la surcharge des opérateurs. Les méthodes peuvent être inline.
A coté du symbole /* et */ pour enclore les commentaires, il utilise le symbole // pour un commentaire d'une ligne. On notera la réapparition d'un symbolisme qui existait déja dans le langage Bcpl, auquel le langage C à succédé!
Objective C, inventé par Brad Cox en 1984 est une autre version orientée objet de C qui s'inspire de smalltalk. Pas de surcharge des opérateurs.
Utilisé sur le défunt ordinateur Next et pour réaliser le système d'exploitation NextStep il est devenu le langage de programmation d'Apple avec le retour de Steve Jobs et donc celui des iPhones.
Standard ML - 1984
R. Milner, université d’Edimburgh et Cambridge, Inria.
Rechercher "Standard ML Moscow" sur moteur de recherche. Implémentation de ML.
R. Milner, université d’Edimburgh et Cambridge, Inria.
Rechercher "Standard ML Moscow" sur moteur de recherche. Implémentation de ML.
Eiffel - 1985 - Du nom de Gustave Eiffel
Bertrand Meyer
Description
Langage procédural totalement orienté objet, implémente la persistence conçu pour la sécurité du logiciel.
Se compile en C. Peut s'interfacer avec d'autres langages. Il incorpore des éléments de langage fonctionnel, dispose de classes génériques, d'un garbage collector.
Une version dérivée existe en open source, Sather, (nom de la tour de Berkeley).
Bertrand Meyer
Description
Langage procédural totalement orienté objet, implémente la persistence conçu pour la sécurité du logiciel.
Se compile en C. Peut s'interfacer avec d'autres langages. Il incorpore des éléments de langage fonctionnel, dispose de classes génériques, d'un garbage collector.
Une version dérivée existe en open source, Sather, (nom de la tour de Berkeley).
GAP - 1986 - Groups, Algorithms and Programming
Johannes Meier, Werner Nickel, Alice Niemeyer, Martin Schönert, et autres.
Le langage a été défini pour programmer des algorithmes mathématiques.
Il est interprété, interactif et non typé. Liste et records les structures de base.
La syntaxe s'inspire de Pascal avec des différence. Les commentaires sont insérés avec #.
Une fin de bloc est notée par inversion des mot-clés: if fi, do od.
La boucle for à la forme for in liste ou for from to.
Le langage distingue procédures et fonctions.
Ce qui le caractérise est que les variables pointent sur une valeur et non une adresse de mémoire, et la définition d'une fonction qui a la forme d'un appel: x := fonction(arguments) bloc.
On peut imbriquer une fonction dans une autre fonction.
Johannes Meier, Werner Nickel, Alice Niemeyer, Martin Schönert, et autres.
Le langage a été défini pour programmer des algorithmes mathématiques.
Il est interprété, interactif et non typé. Liste et records les structures de base.
La syntaxe s'inspire de Pascal avec des différence. Les commentaires sont insérés avec #.
Une fin de bloc est notée par inversion des mot-clés: if fi, do od.
La boucle for à la forme for in liste ou for from to.
Le langage distingue procédures et fonctions.
Ce qui le caractérise est que les variables pointent sur une valeur et non une adresse de mémoire, et la définition d'une fonction qui a la forme d'un appel: x := fonction(arguments) bloc.
On peut imbriquer une fonction dans une autre fonction.
Miranda - 1989 - Du nom d'une héroïne de Shakespeare (Miranda, admirable en latin)
D.Turner
Inspiré de Sasl et ML. Les arguments d’une fonction ne sont évalués qu’au moment ou ils sont utilisés (lazy evaluation). Pattern-matching imbriqué, modules.
D.Turner
Inspiré de Sasl et ML. Les arguments d’une fonction ne sont évalués qu’au moment ou ils sont utilisés (lazy evaluation). Pattern-matching imbriqué, modules.
Caml - 1987 - Categorical Abstract Machine Language
Suarez, Weiss, Maury
CAML
Caml et Objective caml en 1996, implémentent ML.
Suarez, Weiss, Maury
CAML
Caml et Objective caml en 1996, implémentent ML.
Perl - 1987 - Practical Extracting and Report Langage
Larry Wall
Destiné à remplacer les langages de ligne de commande d’Unix, Sh et Sed ainsi que Awk, il reprend la même (affreuse) syntaxe. Sert surtout à l'administration de système, et aux scripts CGI.
Utilise listes et tableaux associatifs (dictionnaires). Le construct FOREACH permet de parcourir le contenu de listes.
Larry Wall
Destiné à remplacer les langages de ligne de commande d’Unix, Sh et Sed ainsi que Awk, il reprend la même (affreuse) syntaxe. Sert surtout à l'administration de système, et aux scripts CGI.
Utilise listes et tableaux associatifs (dictionnaires). Le construct FOREACH permet de parcourir le contenu de listes.
Oberon - 1988
Niklaus Wirth
Après Modula 2, l'auteur définit le langage Lilith en 1980 (sur machine Lilith), puis Oberon.
Plusieurs constructs d’usage commun sont supprimés afin de réduire encore le risque d’erreurs! Un garbage collector est ajouté.
Haskell - 1990 - Prénom du logicien Haskell Curry
Langage élaboré par un comité pour les langages fonctionnels
Langage purement fonctionnel. Inspiré de Miranda, donc de Sasl.
Tableaux fonctionnels, pattern matching.
Langage élaboré par un comité pour les langages fonctionnels
Langage purement fonctionnel. Inspiré de Miranda, donc de Sasl.
Tableaux fonctionnels, pattern matching.
ABC - 1980-90 - ABC selon l'expression
CWI - Meertens, Pemberton (et Guido Van Rossum)
Langage de script mis au point par CWI aux Pays-bas et qui se voulait un successeur du Quick Basic ou des langages de script sous Unix.
Sans doute le premier à utiser l’indentation seule pour dénoter l’imbrication des procédures: il n’y a pas de délimiteurs comme begin/end ou équivalent.
Autre innovation, il n’y a pas de gestion de fichier, mais persistence des variables globales: elles conservent leur contenu d’une session à l’autre!
Il y a cinq types de base: nombre, chaîne, liste, composé (structure sans noms de champs), tableau.
CWI - Meertens, Pemberton (et Guido Van Rossum)
Langage de script mis au point par CWI aux Pays-bas et qui se voulait un successeur du Quick Basic ou des langages de script sous Unix.
Sans doute le premier à utiser l’indentation seule pour dénoter l’imbrication des procédures: il n’y a pas de délimiteurs comme begin/end ou équivalent.
Autre innovation, il n’y a pas de gestion de fichier, mais persistence des variables globales: elles conservent leur contenu d’une session à l’autre!
Il y a cinq types de base: nombre, chaîne, liste, composé (structure sans noms de champs), tableau.
Python - 1991 - Le nom vient de la série de télévision anglaise "Monty Python Flying Circus"
Guido Van Rossum
Description
Langage de script au typage dynamique. C'est une alternative à Perl.
S’inspire de ABC mais est extensible avec des modules en langage C et orienté objet.
Comme ABC il utilise des types évolués: tuple, liste, dictionnaire.
L'opérateur slice [a : b] permet d’extraire un sous-ensemble d’une liste.
Il existe une version qui compile en bytecode Java, jython et des versions pour .NET.
Guido Van Rossum
Description
Langage de script au typage dynamique. C'est une alternative à Perl.
S’inspire de ABC mais est extensible avec des modules en langage C et orienté objet.
Comme ABC il utilise des types évolués: tuple, liste, dictionnaire.
L'opérateur slice [a : b] permet d’extraire un sous-ensemble d’une liste.
Il existe une version qui compile en bytecode Java, jython et des versions pour .NET.
Pov-Ray - 1991 - Persistence Of Vision (titre d'un livre de science-fiction)
D. et A. Collins, et contributeurs
Pov-Ray est un langage de description d'images.
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).
Reino Kurki-Suonio
Disco est un langage de spécification pour les systèmes réactifs, avec la syntaxe de Pascal. Les constructs du langage sont les objets, les fonctions commandées par évènements (appelées ici actions) et les relations. Une fonction est activée quand un état du système survient et peut-être surchargée. Disco est focalisé sur les interactions collectives. Les layers (couches, cadres) sont les modules du langage. C'est un language orienté-système avec objets et réactions (et non orienté-action comme il est dit dans la présentation).
Ruby - 1994 - Comme la pierre précieuse, par analogie avec Perl
Yukihiro Matsumoto
Description
Ruby a été conçu comme successeur à Perl et alternative à Python, pour être plus clair que le premier et plus orienté-objet que le second. La syntaxe s'inspire de ces deux langages, elle se veut intuitive et naturelle, mais peut être complexe.
Il n'y a pas de nouvelles structures de contrôle comme en Scriptol, mais une quantité d'innovations mineures qui réduisent la taille du code.
C'est un langage interprété, facilement extensible. Les instructions sont terminées par les fin de lignes. Les blocs d'instructions et les boucles sont terminées par "end". On retrouve la plupart des caractéristiques de Python: tableaux associatifs, iterateurs...
Son originalité est dans les objets dynamiques (ajout de méthodes aux instances) et dans le scope des variable dénoté par un préfixe.
Yukihiro Matsumoto
Description
Ruby a été conçu comme successeur à Perl et alternative à Python, pour être plus clair que le premier et plus orienté-objet que le second. La syntaxe s'inspire de ces deux langages, elle se veut intuitive et naturelle, mais peut être complexe.
Il n'y a pas de nouvelles structures de contrôle comme en Scriptol, mais une quantité d'innovations mineures qui réduisent la taille du code.
C'est un langage interprété, facilement extensible. Les instructions sont terminées par les fin de lignes. Les blocs d'instructions et les boucles sont terminées par "end". On retrouve la plupart des caractéristiques de Python: tableaux associatifs, iterateurs...
Son originalité est dans les objets dynamiques (ajout de méthodes aux instances) et dans le scope des variable dénoté par un préfixe.
Java - 1994 - Java se traduit par caoua, café
James Gosling et autres programmeurs chez Sun
Description
Conçu à l'origine, en 1991, comme un langage interactif, et nommé Oak, il n' aucun succès. Mais en 1994 il est réécrit pour Internet et renommé Java (café, caoua). En 1995 les navigateurs peuvent exécuter des applettes. En janvier 1996, Javasoft sort JDK 1.0, le Java Developpement Kit.
Java est un langage orienté objets inspiré de C++. Il se compile en bytecode, interprétable sur tout ordinateur. (Visual Café et GCJ produisent du code machine).
Il simplifie le C++: une classe par fichier, gestion automatique de la mémoire, pas de pointeurs. Il le restreint: pas d’héritage multiple ni de surcharge des opérateurs, mais il ajoute le multitâche intégré, la portabilité.
Java n'a que des tableaux dynamiques, au contraire de C et C++.
James Gosling et autres programmeurs chez Sun
Description
Conçu à l'origine, en 1991, comme un langage interactif, et nommé Oak, il n' aucun succès. Mais en 1994 il est réécrit pour Internet et renommé Java (café, caoua). En 1995 les navigateurs peuvent exécuter des applettes. En janvier 1996, Javasoft sort JDK 1.0, le Java Developpement Kit.
Java est un langage orienté objets inspiré de C++. Il se compile en bytecode, interprétable sur tout ordinateur. (Visual Café et GCJ produisent du code machine).
Il simplifie le C++: une classe par fichier, gestion automatique de la mémoire, pas de pointeurs. Il le restreint: pas d’héritage multiple ni de surcharge des opérateurs, mais il ajoute le multitâche intégré, la portabilité.
Java n'a que des tableaux dynamiques, au contraire de C et C++.
PHP - 1995 - Personal Home Pages Hypertext Processor
Rasmus Lerdorf
Description
Langage de script multi-plateformes, s'intégrant au HTML.
Similaire au langage C, non typé, les variables sont préfixées par le symbole $ comme sous le shell Unix ou Perl. Il parse des pages html incluant du code php et délivre une page en pur html.
Une librairie de fonctions étendue permet au Webmaster du créer des pages dynamiques et interactives.
Microsoft utilise sous Windows un langage équivalent, l'ASP, proche du basic.
Rasmus Lerdorf
Description
Langage de script multi-plateformes, s'intégrant au HTML.
Similaire au langage C, non typé, les variables sont préfixées par le symbole $ comme sous le shell Unix ou Perl. Il parse des pages html incluant du code php et délivre une page en pur html.
Une librairie de fonctions étendue permet au Webmaster du créer des pages dynamiques et interactives.
Microsoft utilise sous Windows un langage équivalent, l'ASP, proche du basic.
JavaScript - 1995 (D'abord nommé LiveScript)
Brendan Eich à Netscape
Description
Language de scripts pour insérer du code procédural and les pages web.
Pour être utilisé dans d'autres applications, par exemples les languages basés sur XML.
Partage la syntaxe de C ou Java, mais avec des variables non typées. Les élements de la page web (window, table, etc...) sont accédés par l'intermédiaire du Document Object Model.
Brendan Eich à Netscape
Description
Language de scripts pour insérer du code procédural and les pages web.
Pour être utilisé dans d'autres applications, par exemples les languages basés sur XML.
Partage la syntaxe de C ou Java, mais avec des variables non typées. Les élements de la page web (window, table, etc...) sont accédés par l'intermédiaire du Document Object Model.
UML - 1996 - Unified Modeling Language
Standard par OMG (Object Management Group) - Grady Booch, Jim Rumbaugh, et Ivar Jacobson
UML est l'union de trois langages de modélisation conçus par les trois auteurs ci-dessus. Le langage utilise une notation graphique pour décrire des projets logiciels. Un source est un diagramme représentant des objects et leur interactions.Un modèle est fait de vues et leur combinaison décrit un système complet. Le modèle est abstrait et indépendant du domaine.
Standard par OMG (Object Management Group) - Grady Booch, Jim Rumbaugh, et Ivar Jacobson
UML est l'union de trois langages de modélisation conçus par les trois auteurs ci-dessus. Le langage utilise une notation graphique pour décrire des projets logiciels. Un source est un diagramme représentant des objects et leur interactions.Un modèle est fait de vues et leur combinaison décrit un système complet. Le modèle est abstrait et indépendant du domaine.
ECMAScript - 1997 - ECMA Script
Standard par le centre de normalisation européen E.C.M.A.
Description
Standard pour le langage JavaScript inventé par Netscape, pour rendre les pages web coté client dynamiques.
Standard par le centre de normalisation européen E.C.M.A.
Description
Standard pour le langage JavaScript inventé par Netscape, pour rendre les pages web coté client dynamiques.
Rebol - 1997 (La définition est plus ancienne) - Relative Expression-Based Object Language
Carl SassenRath
Langage de scripts interprété utilisant un code compact. Il est destiné la communication sur Internet et les systèmes distribués. Il est extensible.
Comporte 45 types utilisant les mêmes opérateurs (ext: date, monnaie...). Les blocs d'instructions sont enclos entre [ ].
Carl SassenRath
Langage de scripts interprété utilisant un code compact. Il est destiné la communication sur Internet et les systèmes distribués. Il est extensible.
Comporte 45 types utilisant les mêmes opérateurs (ext: date, monnaie...). Les blocs d'instructions sont enclos entre [ ].
C# - 2000 - (C-sharp), note de musique, succède à C++ (synonyme de mélodie?)
Anders Hejlsberg / Microsoft.
Description
Ce langage est promis à un grand succès à partir de 2002. Il est le langage de base de la plateforme .NET, pour programmer des logiciels utilisable à distance sur Internet notamment. Comme Java, il reprend la syntaxe du langage C (qui a quand même 30 ans!) avec les mêmes simplifications: garbage collector, absence de pointeur, pas d'héritage multiple, interfaces, multi-tâche...
Le C# se compile en langage intermédiaire , le MSIL (MicroSoft Intermediate Language), et fonctionne avec une bibliothèque multi-langages, le CLR (Common Language Runtime). L'originalité essentielle est que des langages différents peuvent être compilés en MSIL et partager leurs classes.
D'autres innovations ont été incluses au langage:
- les structs sont ici des objets spéciaux passés par valeur.
- Les littéraux sont des objets, avec des méthodes..
- Les attributs sont des objets descriptifs attachés aux éléments du programme et utilisés par le runtime.
- Les propriétés: une méthode définie comme propriété est utilisée comme une variable: prop = 5 est équivalent à prop(5).
- Le construct foreach() pour parcourir des tableaux (nouveau seulement par rapport au Java et au C++).
- Le delegate qui remplace le pointeur de fonctions du langage C.
Par rapport au Java, outre les différences ci-dessus:
- La gestion d'évènements est mieux intégrée.
- Il conserve la surcharge des opérateurs du C++
- Accès plus simple au système natif..
Anders Hejlsberg / Microsoft.
Description
Ce langage est promis à un grand succès à partir de 2002. Il est le langage de base de la plateforme .NET, pour programmer des logiciels utilisable à distance sur Internet notamment. Comme Java, il reprend la syntaxe du langage C (qui a quand même 30 ans!) avec les mêmes simplifications: garbage collector, absence de pointeur, pas d'héritage multiple, interfaces, multi-tâche...
Le C# se compile en langage intermédiaire , le MSIL (MicroSoft Intermediate Language), et fonctionne avec une bibliothèque multi-langages, le CLR (Common Language Runtime). L'originalité essentielle est que des langages différents peuvent être compilés en MSIL et partager leurs classes.
D'autres innovations ont été incluses au langage:
- les structs sont ici des objets spéciaux passés par valeur.
- Les littéraux sont des objets, avec des méthodes..
- Les attributs sont des objets descriptifs attachés aux éléments du programme et utilisés par le runtime.
- Les propriétés: une méthode définie comme propriété est utilisée comme une variable: prop = 5 est équivalent à prop(5).
- Le construct foreach() pour parcourir des tableaux (nouveau seulement par rapport au Java et au C++).
- Le delegate qui remplace le pointeur de fonctions du langage C.
Par rapport au Java, outre les différences ci-dessus:
- La gestion d'évènements est mieux intégrée.
- Il conserve la surcharge des opérateurs du C++
- Accès plus simple au système natif..
AspectJ - 2001 - Aspect for Java
Palo Alto Research Center
Description
Aspect J est une extension Java qui implémente la programmation orienté-aspect. Une technique qui modularise les "concerns" transversaux. Ici l'unité n'est pas la classe, mais un concern, qui se partage entre plusieurs classes. Les concern peuvent être des propriétés, des zones d'intérêt, d'un système et la POA décrit leurs relations, les compose ensemble dans une programme. Les aspects encapsulent un comportement commun à plusieurs classes.
Palo Alto Research Center
Description
Aspect J est une extension Java qui implémente la programmation orienté-aspect. Une technique qui modularise les "concerns" transversaux. Ici l'unité n'est pas la classe, mais un concern, qui se partage entre plusieurs classes. Les concern peuvent être des propriétés, des zones d'intérêt, d'un système et la POA décrit leurs relations, les compose ensemble dans une programme. Les aspects encapsulent un comportement commun à plusieurs classes.
Scriptol - Par Denis Sureau, 2001
Description
Scriptol (Scriptwriter Oriented Language) peut-être compilé en PHP, en C++ puis en binaire exécutable, ce qui lui donne une grande portabilité. C'est à la fois un langage d'applications, de scripts et de pages web.
Les blocs d'instructions et les structures de contrôle ne sont pas clos par "end" ou "}" mais, comme XML, avec la forme: "/if", "/for", " /while", etc...
Le langage dispose de nouvelles structures de controle: "for in", "while let", "scan by", etc... Le "if composite" facilite l'implémentation de règles.
Les variables et les litteraux sont des objets. On crée un objet primaire (nombre, texte, etc...) ou évolué par affectation directe d'une valeur ou d'une liste d'arguments au nom.
Scriptol est destiné à évoluer pour fournir, à coté des classes, d'autres structures de haut niveau et rapprocher la programmation de la pensée.
Depuis octobre 2003, scriptol permet d'utiliser XML comme structure de données interne.
Description
Scriptol (Scriptwriter Oriented Language) peut-être compilé en PHP, en C++ puis en binaire exécutable, ce qui lui donne une grande portabilité. C'est à la fois un langage d'applications, de scripts et de pages web.
Les blocs d'instructions et les structures de contrôle ne sont pas clos par "end" ou "}" mais, comme XML, avec la forme: "/if", "/for", " /while", etc...
Le langage dispose de nouvelles structures de controle: "for in", "while let", "scan by", etc... Le "if composite" facilite l'implémentation de règles.
Les variables et les litteraux sont des objets. On crée un objet primaire (nombre, texte, etc...) ou évolué par affectation directe d'une valeur ou d'une liste d'arguments au nom.
Scriptol est destiné à évoluer pour fournir, à coté des classes, d'autres structures de haut niveau et rapprocher la programmation de la pensée.
Depuis octobre 2003, scriptol permet d'utiliser XML comme structure de données interne.
Scala. Février 2004
Ecole Polytechnique Fédérale de Lausanne
Description
Scala est un langage purement orienté-objets qui implémente quelques caractéristiques de Python dans la syntaxe Java. Il est statiquement typé et à la fois procédural et fonctionnel. Il tourne actuellement sur JVM et .NET.
Ecole Polytechnique Fédérale de Lausanne
Description
Scala est un langage purement orienté-objets qui implémente quelques caractéristiques de Python dans la syntaxe Java. Il est statiquement typé et à la fois procédural et fonctionnel. Il tourne actuellement sur JVM et .NET.
Go - Par Google, 2009
Description
Créé par Google pour ses propres développements mais placé dans le domaine public sous licence libre, il est conçu spécialement pour la vitesse de compilation.
C'est une version moderne de C++ sans les fichiers d'en-tête, avec une syntaxe simplifiée. Les classes sont remplacées par de simples interface et l'héritage a disparu.
Il apporte la concurrence et inclut un garbage collector mais aucun apport substanciel quand à la conception des langages de programmation.
Description
Créé par Google pour ses propres développements mais placé dans le domaine public sous licence libre, il est conçu spécialement pour la vitesse de compilation.
C'est une version moderne de C++ sans les fichiers d'en-tête, avec une syntaxe simplifiée. Les classes sont remplacées par de simples interface et l'héritage a disparu.
Il apporte la concurrence et inclut un garbage collector mais aucun apport substanciel quand à la conception des langages de programmation.
Julia - 2010
Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman. Sponsorisé par la DARPA.
Description
Les auteurs ont voulu implémenter les meilleures fonctionnalités de tous les autres langages de programmation: objets, concurrence, homoiconicité, fonctionnement distribué, macros, généricité. Cela avec une syntaxe la plus concise et la plus claire possible. Julia fait avancer considérablement la programmation.
Le code Julia est compilé avec le JIT de LLVM et fonctionne comme un interpréteur.
Ses principaux domaines d'application sont les programmes scientifiques grâce à la bibliothèque étendu, le cloud avec le traitement distribué et concurrent, et grâce à la capacité d'un programme à se modifier lui-même, la robotique.
Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman. Sponsorisé par la DARPA.
Description
Les auteurs ont voulu implémenter les meilleures fonctionnalités de tous les autres langages de programmation: objets, concurrence, homoiconicité, fonctionnement distribué, macros, généricité. Cela avec une syntaxe la plus concise et la plus claire possible. Julia fait avancer considérablement la programmation.
Le code Julia est compilé avec le JIT de LLVM et fonctionne comme un interpréteur.
Ses principaux domaines d'application sont les programmes scientifiques grâce à la bibliothèque étendu, le cloud avec le traitement distribué et concurrent, et grâce à la capacité d'un programme à se modifier lui-même, la robotique.
Dart - Par Google, 2011
Description
Destiné à remplacer JavaScript, que Google trouve entaché de défauts de conception irréparables (ce n'est pas l'avis de tous les acteurs du Web), il se rapproche de langages statiques comme Java, avec des classes dotées d'un héritage simple, des variables types ou dynamiques au choix. Il apporte des progrès dans les fonctionalités (concurrence, mixins, streams) mais constitue plutôt une régression dans le design par rapport à JavaScript dont les capacités dynamiques ont constitué une réelle évolution. La version 5 de JavaScript prévoit l'ajout de classes et héritage ce qui réduit l'intérêt de Dart dans le navigateur.
Description
Destiné à remplacer JavaScript, que Google trouve entaché de défauts de conception irréparables (ce n'est pas l'avis de tous les acteurs du Web), il se rapproche de langages statiques comme Java, avec des classes dotées d'un héritage simple, des variables types ou dynamiques au choix. Il apporte des progrès dans les fonctionalités (concurrence, mixins, streams) mais constitue plutôt une régression dans le design par rapport à JavaScript dont les capacités dynamiques ont constitué une réelle évolution. La version 5 de JavaScript prévoit l'ajout de classes et héritage ce qui réduit l'intérêt de Dart dans le navigateur.
Rust - Par Mozilla, 2006-2011
Description
Ce langage système créé originellement par Graydon Hoare in 2006 et repris par Mozilla (son employeur) en 2009 dispose d'un compilateur depuis 2011. Sa syntaxe est dérivée de celle de C avec des additions pour gérer la concurrence et des additions syntaxiques. Il est orienté objet et générique avec des classes polymorphiques comme dans Haskell.
Il se veut plus sûr pour le Web et tirant mieux profit des processeurs actuels.
Description
Ce langage système créé originellement par Graydon Hoare in 2006 et repris par Mozilla (son employeur) en 2009 dispose d'un compilateur depuis 2011. Sa syntaxe est dérivée de celle de C avec des additions pour gérer la concurrence et des additions syntaxiques. Il est orienté objet et générique avec des classes polymorphiques comme dans Haskell.
Il se veut plus sûr pour le Web et tirant mieux profit des processeurs actuels.
Asm.js - 2013 - By Mozilla
Description
Ce sous-ensemble de JavaScript permet en combinaison avec d'autre outils de convertir les applications et librairies écrites en d'autres langages et les utiliser sur le navigateur. Cela fait de celui-ci une interface universelle pour des logiciels en ligne ou hors ligne fonctionnant sur tous systèmes d'exploitation et tous types de matériels, de l'ordinateur de bureau au smartphone.
Description
Ce sous-ensemble de JavaScript permet en combinaison avec d'autre outils de convertir les applications et librairies écrites en d'autres langages et les utiliser sur le navigateur. Cela fait de celui-ci une interface universelle pour des logiciels en ligne ou hors ligne fonctionnant sur tous systèmes d'exploitation et tous types de matériels, de l'ordinateur de bureau au smartphone.
Swift - 2014 - By Apple
Description
Conçu pour remplacer Objective-C sur les appareils Apple et notamment l'iPhone et l'iTab il supprime une partie des défauts de ce langage ancien. Il a une conception classique et se distingue surtout en changeant le nom des éléments de langage, les interface devenant des protocoles, par exemple.
Description
Conçu pour remplacer Objective-C sur les appareils Apple et notamment l'iPhone et l'iTab il supprime une partie des défauts de ce langage ancien. Il a une conception classique et se distingue surtout en changeant le nom des éléments de langage, les interface devenant des protocoles, par exemple.
Du présent au futur
On voit qu'après la pléthore de dialectes des années 70, l'invention de langages à stagné quand à la syntaxe. Les langages courants, même récents comme Java, C#, PHP, n'apportent aucun changement aux instructions du traitement, Go et Dart sont même une régression. Seul Julia constitue une réelle avancée et exploite les capacités actuelles des ordinateurs.L'usage de JavaScript se généralise en même temps que les applications Web offline.
Quelques tendances:
- 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.
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.
- Le futur des langages de programmation. Des idées nouvelles.
Aucun commentaire:
Enregistrer un commentaire