Langage de programmation

0

Un langage de programmation est un ensemble de règles qui convertit des chaînes , ou des éléments de programme graphiques dans le cas des langages de programmation visuels , en différents types de sortie de code machine . Les langages de programmation sont un type de langage informatique et sont utilisés dans la programmation informatique pour implémenter des algorithmes .

Le code source d’un programme informatique simple écrit en langage de programmation C . Les lignes grises sont des commentaires qui aident à expliquer le programme aux humains dans un langage naturel . Une fois compilé et exécuté , il donnera la sortie ” Hello, world! “.

La plupart des langages de programmation consistent en des instructions pour les ordinateurs . Il existe des machines programmables qui utilisent un ensemble d’ instructions spécifiques , plutôt que des langages de programmation généraux . Depuis le début des années 1800, des programmes ont été utilisés pour diriger le comportement de machines telles que les métiers Jacquard , les boîtes à musique et les pianos mécaniques . [1] Les programmes de ces machines (tels que les rouleaux d’un piano mécanique) ne produisaient pas de comportement différent en réponse à différentes entrées ou conditions.

Des milliers de langages de programmation différents ont été créés, et d’autres sont créés chaque année. De nombreux langages de programmation sont écrits sous une forme impérative (c’est-à-dire comme une séquence d’opérations à effectuer) tandis que d’autres langages utilisent la forme déclarative (c’est-à-dire que le résultat souhaité est spécifié, pas comment l’obtenir).

La description d’un langage de programmation est généralement divisée en deux composantes, la syntaxe (forme) et la sémantique (sens), qui sont généralement définies par un langage formel . Certains langages sont définis par un document de spécification (par exemple, le langage de programmation C est spécifié par une norme ISO ) tandis que d’autres langages (comme Perl ) ont une implémentation dominante qui est traitée comme une référence . Certains langages ont les deux, le langage de base étant défini par une norme et les extensions tirées de l’implémentation dominante étant communes.

La théorie des langages de programmation est un sous-domaine de l’informatique qui traite de la conception, de la mise en œuvre, de l’analyse, de la caractérisation et de la classification des langages de programmation.

Définitions

Un langage de programmation est une notation pour écrire des programmes , qui sont des spécifications d’un calcul ou d’un algorithme . [2] Certains auteurs limitent le terme “langage de programmation” aux langages qui peuvent exprimer tous les algorithmes possibles. [2] [3] Les traits souvent considérés comme importants pour ce qui constitue un langage de programmation incluent :

Fonction et cible Un langage de programmation informatique est un langage utilisé pour écrire des programmes informatiques , ce qui implique qu’un ordinateur effectue une sorte de calcul [4] ou d’ algorithme et contrôle éventuellement des périphériques externes tels que des imprimantes , des lecteurs de disque , des robots , [5] , etc. Par exemple, PostScriptles programmes sont fréquemment créés par un autre programme pour contrôler une imprimante ou un écran d’ordinateur. Plus généralement, un langage de programmation peut décrire le calcul sur une machine, éventuellement abstraite. Il est généralement admis qu’une spécification complète pour un langage de programmation comprend une description, éventuellement idéalisée, d’une machine ou d’un processeur pour ce langage. [6] Dans la plupart des contextes pratiques, un langage de programmation implique un ordinateur ; par conséquent, les langages de programmation sont généralement définis et étudiés de cette manière. [7] Les langages de programmation diffèrent des langages naturelsen ce que les langages naturels ne sont utilisés que pour l’interaction entre les personnes, tandis que les langages de programmation permettent également aux humains de communiquer des instructions aux machines. Abstractions Les langages de programmation contiennent généralement des abstractions pour définir et manipuler des structures de données ou contrôler le flux d’exécution . La nécessité pratique qu’un langage de programmation supporte des abstractions adéquates est exprimée par le principe d’abstraction . [8] Ce principe est parfois formulé comme une recommandation au programmeur de faire bon usage de telles abstractions. [9] Pouvoir expressif La théorie du calcul classe les langages selon les calculs qu’ils sont capables d’exprimer. Tous les langages Turing-complets peuvent implémenter le même ensemble d’ algorithmes . ANSI/ISO SQL-92 et Charity sont des exemples de langages qui ne sont pas complets de Turing, mais sont souvent appelés langages de programmation. [10] [11]

Les Langages de balisage tels que XML , HTML ou troff , qui définissent des Données structurées , ne sont généralement pas considérés comme des langages de programmation. [12] [13] [14] Les langages de programmation peuvent cependant partager la syntaxe avec les Langages de balisage si une sémantique de calcul est définie. XSLT , par exemple, est un langage complet de Turing utilisant entièrement la syntaxe XML. [15] [16] [17] De plus, LaTeX , qui est principalement utilisé pour structurer des documents, contient également un sous-ensemble complet de Turing. [18] [19]

Le terme langage informatique est parfois utilisé de manière interchangeable avec langage de programmation. [20] Cependant, l’utilisation des deux termes varie selon les auteurs, y compris la portée exacte de chacun. Un usage décrit les langages de programmation comme un sous-ensemble de langages informatiques. [21] De même, les langages utilisés en informatique qui ont un objectif différent de celui d’exprimer des programmes informatiques sont des langages informatiques génériquement désignés. Par exemple, les Langages de balisage sont parfois appelés langages informatiques pour souligner qu’ils ne sont pas destinés à être utilisés pour la programmation. [22]

Une autre utilisation concerne les langages de programmation comme des constructions théoriques pour programmer des machines abstraites , et les langages informatiques comme un sous-ensemble de ceux-ci qui s’exécutent sur des ordinateurs physiques, qui ont des ressources matérielles finies. [23] John C. Reynolds souligne que les langages de spécification formels sont tout autant des langages de programmation que les langages destinés à l’exécution. Il soutient également que les formats d’entrée textuels et même graphiques qui affectent le comportement d’un ordinateur sont des langages de programmation, malgré le fait qu’ils ne sont généralement pas complets de Turing, et remarque que l’ignorance des concepts de langage de programmation est la raison de nombreux défauts dans les formats d’entrée. [24]

Histoire

Premiers développements

Les tout premiers ordinateurs, tels que Colossus , étaient programmés sans l’aide d’un programme stocké , en modifiant leurs circuits ou en définissant des banques de commandes physiques.

Un peu plus tard, les programmes pourraient être écrits en langage machine , où le programmeur écrit chaque instruction sous une forme numérique que le matériel peut exécuter directement. Par exemple, l’instruction d’addition de la valeur dans deux emplacements de mémoire peut consister en 3 nombres : un “opcode” qui sélectionne l’opération “ajouter” et deux emplacements de mémoire. Les programmes, sous forme décimale ou binaire, étaient lus à partir de cartes perforées , de bandes papier, de bandes magnétiques ou basculés sur des interrupteurs situés sur le panneau avant de l’ordinateur. Les langages machine ont ensuite été appelés langages de programmation de première génération (1GL).

L’étape suivante a été le développement des langages de programmation dits de deuxième génération (2GL) ou langages d’assemblage , qui étaient encore étroitement liés à l’ architecture du jeu d’instructions de l’ordinateur spécifique. Ceux-ci ont servi à rendre le programme beaucoup plus lisible par l’homme et ont soulagé le programmeur des calculs d’adresse fastidieux et sujets aux erreurs.

Les premiers langages de programmation de haut niveau , ou langages de programmation de troisième génération (3GL), ont été écrits dans les années 1950. Un premier langage de programmation de haut niveau conçu pour un ordinateur était Plankalkül , développé pour le Z3 allemand par Konrad Zuse entre 1943 et 1945. Cependant, il n’a été implémenté qu’en 1998 et 2000. [25]

Le Short Code de John Mauchly , proposé en 1949, a été l’un des premiers langages de haut niveau jamais développés pour un Ordinateur électronique . [26] Contrairement au code machine , les instructions Short Code représentaient des expressions mathématiques sous une forme compréhensible. Cependant, le programme devait être traduit en code machine à chaque exécution, ce qui rendait le processus beaucoup plus lent que l’exécution du code machine équivalent.

À l’ Université de Manchester , Alick Glennie a développé Autocode au début des années 1950. En tant que langage de programmation , il utilisait un compilateur pour convertir automatiquement le langage en code machine. Le premier code et compilateur a été développé en 1952 pour l’ ordinateur Mark 1 à l’Université de Manchester et est considéré comme le premier langage de programmation de haut niveau compilé . [27] [28]

Le deuxième autocode a été développé pour le Mark 1 par RA Brooker en 1954 et s’appelait “Mark 1 Autocode”. Brooker a également développé un autocode pour le Ferranti Mercury dans les années 1950 en collaboration avec l’Université de Manchester. La version de l’ EDSAC 2 a été conçue par DF ​​Hartley du Laboratoire de mathématiques de l’Université de Cambridge en 1961. Connu sous le nom d’EDSAC 2 Autocode, il s’agissait d’un développement direct de Mercury Autocode adapté aux circonstances locales et a été noté pour son optimisation du code objet et son langage source. diagnostics avancés pour l’époque. Un fil de développement contemporain mais distinct, Atlas Autocode a été développé pour l’Université de ManchesterAtlas 1 machine.

En 1954, Fortran est inventé chez IBM par John Backus . C’était le premier langage de programmation généraliste de haut niveau largement utilisé à avoir une implémentation fonctionnelle, par opposition à une simple conception sur papier. [29] [30] C’est toujours un langage populaire pour le calcul haute performance [31] et est utilisé pour les programmes qui comparent et classent les superordinateurs les plus rapides au monde . [32]

Un autre premier langage de programmation a été conçu par Grace Hopper aux États-Unis, appelé FLOW-MATIC . Il a été développé pour l’ UNIVAC I à Remington Rand pendant la période de 1955 à 1959. Hopper a constaté que les clients du traitement de données d’entreprise n’étaient pas à l’aise avec la notation mathématique, et au début de 1955, elle et son équipe ont écrit une spécification pour un langage de programmation anglais et mis en œuvre un proto. [33] Le compilateur FLOW-MATIC est devenu accessible au public au début de 1958 et était pratiquement terminé en 1959. [34] FLOW-MATIC a eu une influence majeure dans la conception de COBOL , puisque seuls lui et son descendant direct AIMACOétaient réellement utilisés à l’époque. [35]

Raffinement

L’utilisation accrue de langages de haut niveau a introduit une exigence pour les langages de programmation de bas niveau ou les langages de programmation système . Ces langages, à des degrés divers, offrent des facilités entre les langages d’assemblage et les langages de haut niveau. Ils peuvent être utilisés pour effectuer des tâches qui nécessitent un accès direct aux installations matérielles, mais fournissent toujours des structures de contrôle de niveau supérieur et une vérification des erreurs.

La période des années 1960 à la fin des années 1970 a vu le développement des principaux paradigmes linguistiques actuellement utilisés :

  • APL a introduit la programmation matricielle et influencé la programmation fonctionnelle . [36]
  • ALGOL a affiné à la fois la programmation procédurale structurée et la discipline de spécification du langage ; le “Revised Report on the Algorithmic Language ALGOL 60 ” est devenu un modèle pour la façon dont les spécifications de langage ultérieures ont été écrites.
  • Lisp , implémenté en 1958, a été le premier langage de programmation fonctionnel à typage dynamique .
  • Dans les années 1960, Simula était le premier langage conçu pour supporter la programmation orientée objet ; au milieu des années 1970, Smalltalk a suivi avec le premier langage “purement” orienté objet.
  • C a été développé entre 1969 et 1973 en tant que langage de programmation système pour le système d’exploitation Unix et reste populaire. [37]
  • Prolog , conçu en 1972, a été le premier langage de programmation logique .
  • En 1978, ML a construit un système de type polymorphe au-dessus de Lisp , pionnier des langages de programmation fonctionnels à typage statique .

Chacun de ces langages a engendré des descendants, et la plupart des langages de programmation modernes en comptent au moins un dans leur ascendance.

Les années 1960 et 1970 ont également vu un débat considérable sur les mérites de la programmation structurée et sur la question de savoir si les langages de programmation devraient être conçus pour la prendre en charge. [38] Edsger Dijkstra , dans une célèbre lettre de 1968 publiée dans les Communications de l’ACM , a soutenu que les instructions Goto devraient être éliminées de tous les langages de programmation “de niveau supérieur”. [39]

Consolidation et croissance

Une sélection de manuels de langage de programmation ; seulement quelques-uns des milliers disponibles.

Les années 1980 ont été des années de relative consolidation. C++ combine programmation orientée objet et système. Le gouvernement des États-Unis a standardisé Ada , un langage de programmation système dérivé de Pascal et destiné à être utilisé par les sous-traitants de la défense. Au Japon et ailleurs, des sommes considérables ont été dépensées pour étudier les langages dits de “cinquième génération” qui incorporaient des constructions de programmation logique. [40] La communauté des langages fonctionnels s’est déplacée pour standardiser ML et Lisp. Plutôt que d’inventer de nouveaux paradigmes, tous ces mouvements ont développé les idées inventées au cours des décennies précédentes.

Une tendance importante dans la conception de langages pour la programmation de systèmes à grande échelle au cours des années 1980 était une concentration accrue sur l’utilisation de modules ou d’unités organisationnelles de code à grande échelle. Modula-2 , Ada et ML ont tous développé des systèmes de modules notables dans les années 1980, qui étaient souvent associés à des constructions de programmation génériques . [41]

La croissance rapide d’ Internet au milieu des années 1990 a créé des opportunités pour de nouvelles langues. Perl , à l’origine un outil de script Unix lancé pour la première fois en 1987, est devenu courant dans les sites Web dynamiques . Java est devenu utilisé pour la programmation côté serveur, et les machines virtuelles bytecode sont redevenues populaires dans les environnements commerciaux avec leur promesse de ” écrire une fois, exécuter n’importe où ” ( UCSD Pascal avait été populaire pendant un certain temps au début des années 1980). Ces développements n’étaient pas fondamentalement nouveaux; il s’agissait plutôt d’améliorations de nombreux langages et paradigmes existants (bien que leur syntaxe soit souvent basée sur la famille C des langages de programmation).

L’évolution des langages de programmation se poursuit, tant dans l’industrie que dans la recherche. Les orientations actuelles incluent la vérification de la sécurité et de la fiabilité , de nouveaux types de modularité ( mixins , délégués , aspects ) et l’intégration de bases de données telles que LINQ de Microsoft .

Les langages de programmation de quatrième génération (4GL) sont des langages de programmation informatique qui visent à fournir un niveau d’abstraction plus élevé des détails du matériel informatique interne que les 3GL. Les langages de programmation de cinquième génération (5GL) sont des langages de programmation basés sur la résolution de problèmes en utilisant des contraintes données au programme, plutôt qu’en utilisant un algorithme écrit par un programmeur.

Éléments

Tous les langages de programmation ont des blocs de construction primitifs pour la description des données et les processus ou transformations qui leur sont appliqués (comme l’addition de deux nombres ou la sélection d’un élément dans une collection). Ces primitives sont définies par des règles syntaxiques et sémantiques qui décrivent respectivement leur structure et leur signification.

Syntaxe

Arborescence d’analyse du code Python avec tokenisation d’ encart La coloration syntaxique est souvent utilisée pour aider les programmeurs à reconnaître les éléments du code source. Le langage ci-dessus est Python .

La forme de surface d’un langage de programmation est connue sous le nom de syntaxe . La plupart des langages de programmation sont purement textuels ; ils utilisent des séquences de texte comprenant des mots, des chiffres et des signes de ponctuation, un peu comme les langues naturelles écrites. D’autre part, certains langages de programmation sont de nature plus graphique , utilisant des relations visuelles entre les symboles pour spécifier un programme.

La syntaxe d’un langage décrit les combinaisons possibles de symboles qui forment un programme syntaxiquement correct. La signification donnée à une combinaison de symboles est gérée par la sémantique (soit formelle , soit codée en dur dans une implémentation de référence ). Étant donné que la plupart des langages sont textuels, cet article traite de la syntaxe textuelle.

La syntaxe du langage de programmation est généralement définie à l’aide d’une combinaison d’ expressions régulières (pour la structure lexicale ) et de la forme Backus – Naur (pour la structure grammaticale ). Ci-dessous une grammaire simple, basée sur Lisp :

expression ::= atome | liste atome ::= nombre | symbole nombre ::= [+-]?[‘0’-‘9’]+ symbole ::= [‘A’-‘Z”a’-‘z’].* liste ::= ‘(‘ expression* ‘)’

Cette grammaire spécifie les éléments suivants :

  • une expression est soit un atome, soit une liste ;
  • un atome est soit un nombre , soit un symbole ;
  • un nombre est une suite ininterrompue d’un ou plusieurs chiffres décimaux, éventuellement précédés d’un signe plus ou moins ;
  • un symbole est une lettre suivie de zéro ou plus de n’importe quel caractère (à l’exclusion des espaces blancs) ; et
  • une liste est une paire de parenthèses appariées, avec zéro ou plusieurs expressions à l’intérieur.

Voici des exemples de séquences de jetons bien formées dans cette grammaire : 12345, ()et (a b c232 (1)).

Tous les programmes syntaxiquement corrects ne sont pas sémantiquement corrects. De nombreux programmes syntaxiquement corrects sont néanmoins mal formés, selon les règles du langage; et peut (selon la spécification du langage et la solidité de l’implémentation) entraîner une erreur de traduction ou d’exécution. Dans certains cas, ces programmes peuvent présenter un comportement indéfini . Même lorsqu’un programme est bien défini dans une langue, il peut toujours avoir une signification qui n’est pas voulue par la personne qui l’a écrit.

En utilisant le langage naturel comme exemple, il peut ne pas être possible d’attribuer un sens à une phrase grammaticalement correcte ou la phrase peut être fausse :

  • ” Les idées vertes incolores dorment furieusement .” est grammaticalement bien formé mais n’a pas de sens généralement accepté.
  • “John est un célibataire marié.” est grammaticalement bien formé mais exprime un sens qui ne peut pas être vrai.

Le fragment de langage C suivant est syntaxiquement correct, mais effectue des opérations qui ne sont pas sémantiquement définies (l’opération *p >> 4n’a aucune signification pour une valeur ayant un type complexe et p->imn’est pas définie car la valeur de pest le pointeur null ) :

complexe * p = NULL ; complexe abs_p = sqrt ( * p >> 4 + p -> im );

Si la Déclaration de type sur la première ligne était omise, le programme déclencherait une erreur sur une variable indéfinie plors de la compilation. Cependant, le programme serait toujours syntaxiquement correct puisque les déclarations de type ne fournissent que des informations sémantiques.

La grammaire nécessaire pour spécifier un langage de programmation peut être classée selon sa position dans la hiérarchie de Chomsky . La syntaxe de la plupart des langages de programmation peut être spécifiée à l’aide d’une grammaire de type 2, c’est-à-dire qu’il s’agit de grammaires sans contexte . [42] Certains langages, dont Perl et Lisp, contiennent des constructions qui permettent l’exécution pendant la phase d’analyse. Les langages qui ont des constructions qui permettent au programmeur de modifier le comportement de l’analyseur font de l’analyse syntaxique un problème indécidable et brouillent généralement la distinction entre l’analyse et l’exécution. [43] Contrairement au système macro de Lisp et à celui de PerlBEGINblocs, qui peuvent contenir des calculs généraux, les macros C sont simplement des remplacements de chaîne et ne nécessitent pas l’exécution de code. [44]

Sémantique

Le terme sémantique fait référence au sens des langues, par opposition à leur forme ( syntaxe ).

Sémantique statique

La sémantique statique définit des restrictions sur la structure des textes valides qui sont difficiles ou impossibles à exprimer dans les formalismes syntaxiques standards. [2] Pour les langages compilés, la sémantique statique inclut essentiellement les règles sémantiques qui peuvent être vérifiées au moment de la compilation. Les exemples incluent la vérification que chaque identifiant est déclaré avant d’être utilisé (dans les langages qui nécessitent de telles déclarations) ou que les étiquettes sur les bras d’une instruction case sont distinctes. [45] De nombreuses restrictions importantes de ce type, comme vérifier que les identifiants sont utilisés dans le contexte approprié (par exemple, ne pas ajouter d’entier à un nom de fonction), ou que la sous- routineappels ont le nombre et le type d’arguments appropriés, peuvent être appliqués en les définissant comme des règles dans une logique appelée système de type . D’autres formes d’ analyses statiques telles que l’analyse des flux de données peuvent également faire partie de la sémantique statique. Les langages de programmation plus récents comme Java et C# ont une analyse d’affectation définie , une forme d’analyse de flux de données, dans le cadre de leur sémantique statique.

Sémantique dynamique

Une fois les données spécifiées, la machine doit recevoir l’instruction d’effectuer des opérations sur les données. Par exemple, la sémantique peut définir la stratégie par laquelle les expressions sont évaluées en valeurs, ou la manière dont les structures de contrôle exécutent conditionnellement les instructions . La sémantique dynamique (également appelée sémantique d’exécution ) d’un langage définit comment et quand les différentes constructions d’un langage doivent produire un comportement de programme. Il existe de nombreuses façons de définir la sémantique d’exécution. Le langage naturel est souvent utilisé pour spécifier la sémantique d’exécution des langages couramment utilisés dans la pratique. Une quantité importante de recherches universitaires a porté sur la Sémantique formelle des langages de programmation, qui permettent de spécifier la sémantique d’exécution de manière formelle. Les résultats de ce domaine de recherche ont vu une application limitée à la conception et à la mise en œuvre de langages de programmation en dehors du milieu universitaire.

Système de types

Un système de types définit comment un langage de programmation classe les valeurs et les expressions en types , comment il peut manipuler ces types et comment ils interagissent. Le but d’un système de type est de vérifier et généralement d’appliquer un certain niveau d’exactitude dans les programmes écrits dans ce langage en détectant certaines opérations incorrectes. Tout système de type décidable implique un compromis : s’il rejette de nombreux programmes incorrects, il peut également interdire certains programmes corrects, bien qu’inhabituels. Afin de contourner cet inconvénient, un certain nombre de langages ont des failles de type , généralement des conversions non contrôlées qui peuvent être utilisées par le programmeur pour autoriser explicitement une opération normalement interdite entre différents types. Dans la plupart des langages typés, le système de type n’est utilisé que pourprogrammes de vérification de type , mais un certain nombre de langages, généralement fonctionnels, infèrent des types , soulageant le programmeur de la nécessité d’écrire des annotations de type. La conception et l’étude formelles des systèmes de types sont connues sous le nom de théorie des types .

Langages typés versus non typés

Un langage est typé si la spécification de chaque opération définit les types de données auxquels l’opération est applicable. [46] Par exemple, les données représentées par “this text between the quotes”sont une chaîne , et dans de nombreux langages de programmation, diviser un nombre par une chaîne n’a aucune signification et ne sera pas exécuté. L’opération invalide peut être détectée lors de la compilation du programme (vérification de type “statique”) et sera rejetée par le compilateur avec un message d’erreur de compilation, ou elle peut être détectée pendant l’exécution du programme (vérification de type “dynamique”), résultant dans une exception d’exécution . De nombreux langages autorisent une fonction appelée gestionnaire d’exceptions à gérer cette exception et, par exemple, renvoient toujours “-1” comme résultat.

Learn more.

Un cas particulier de langages typés sont les langages monotypés . Ce sont souvent des langages de script ou de balisage, tels que REXX ou SGML , et n’ont qu’un seul type de données [ douteux – discuter ] – le plus souvent des chaînes de caractères qui sont utilisées à la fois pour les données symboliques et numériques.

En revanche, un langage non typé , comme la plupart des langages d’assemblage , permet d’effectuer n’importe quelle opération sur n’importe quelle donnée, généralement des séquences de bits de différentes longueurs. [46] Les langages non typés de haut niveau incluent BCPL , Tcl et certaines variétés de Forth .

En pratique, alors que peu de langages sont considérés comme typés à partir de la théorie des types (vérifiant ou rejetant toutes les opérations), la plupart des langages modernes offrent un degré de typage. [46] De nombreux langages de production fournissent des moyens de contourner ou de subvertir le système de type, échangeant la sécurité de type contre un contrôle plus fin de l’exécution du programme (voir casting ).

Typage statique ou dynamique

Dans le typage statique , toutes les expressions ont leurs types déterminés avant l’exécution du programme, généralement au moment de la compilation. Par exemple, 1 et (2+2) sont des expressions entières ; ils ne peuvent pas être passés à une fonction qui attend une chaîne, ni stockés dans une variable définie pour contenir des dates. [46]

Les langages typés statiquement peuvent être soit manifestement typés , soit inférés par type . Dans le premier cas, le programmeur doit explicitement écrire des types à certaines positions textuelles (par exemple, aux déclarations de variables ). Dans le second cas, le compilateur déduit les types d’expressions et de déclarations en fonction du contexte. La plupart des langages à typage statique courants, tels que C++ , C# et Java , sont manifestement typés. L’inférence de type complète a traditionnellement été associée à des langages moins courants, tels que Haskell et ML . Cependant, de nombreux langages manifestement typés prennent en charge l’inférence de type partielle ; par exemple,C++ , Java et C# infèrent tous des types dans certains cas limités. [47] De plus, certains langages de programmation permettent à certains types d’être automatiquement convertis en d’autres types ; par exemple, un int peut être utilisé là où le programme attend un flottant.

Le typage dynamique , également appelé typage latent , détermine la sécurité de type des opérations au moment de l’exécution ; en d’autres termes, les types sont associés à des valeurs d’exécution plutôt qu’à des expressions textuelles . [46] Comme pour les langages inférés par type, les langages typés dynamiquement n’exigent pas que le programmeur écrive des annotations de type explicites sur les expressions. Entre autres choses, cela peut permettre à une seule variable de se référer à des valeurs de différents types à différents points de l’exécution du programme. Cependant, les erreurs de type ne peuvent pas être automatiquement détectées tant qu’un morceau de code n’est pas réellement exécuté, ce qui peut rendre le débogage plus difficile. Lisp , Smalltalk, Perl , Python , JavaScript et Ruby sont tous des exemples de langages à typage dynamique.

Dactylographie faible et forte

Un typage faible permet à une valeur d’un type d’être traitée comme une autre, par exemple en traitant une chaîne comme un nombre. [46] Cela peut parfois être utile, mais cela peut également permettre à certains types de défauts de programme de passer inaperçus au moment de la compilation et même au moment de l’exécution .

Un typage fort empêche ces erreurs de programme. Une tentative d’exécution d’une opération sur le mauvais type de valeur génère une erreur. [46] Les langages fortement typés sont souvent appelés type-safe ou safe .

Une autre définition de “faiblement typé” fait référence à des langages, tels que Perl et JavaScript , qui permettent un grand nombre de conversions de types implicites. En JavaScript, par exemple, l’expression est 2 * ximplicitement convertie xen nombre, et cette conversion réussit même si xest null, undefined, an Array, ou une chaîne de lettres. De telles conversions implicites sont souvent utiles, mais elles peuvent masquer des erreurs de programmation. Fort et statique sont maintenant généralement considérés comme des concepts orthogonaux, mais l’utilisation dans la littérature diffère. Certains utilisent le terme fortement typé pour signifier fortement, statiquement typé , ou, encore plus déroutant, pour signifier simplementtypé statiquement . Ainsi C a été appelé à la fois fortement typé et faiblement typé statiquement. [48] ​​[49]

Il peut sembler étrange à certains programmeurs professionnels que C puisse être “faiblement typé statiquement”. Cependant, notez que l’utilisation du pointeur générique, le pointeur void* , permet le transtypage de pointeurs vers d’autres pointeurs sans avoir besoin de faire un transtypage explicite. Ceci est extrêmement similaire à la conversion d’un tableau d’octets en n’importe quel type de données en C sans utiliser de conversion explicite, telle que (int)ou (char).

Bibliothèque standard et système d’exécution

La plupart des langages de programmation ont une bibliothèque principale associée (parfois appelée « bibliothèque standard », en particulier si elle fait partie de la norme de langage publiée), qui est classiquement mise à disposition par toutes les implémentations du langage. Les bibliothèques principales incluent généralement des définitions d’algorithmes, de structures de données et de mécanismes d’entrée et de sortie couramment utilisés.

La ligne entre une langue et sa bibliothèque principale diffère d’une langue à l’autre. Dans certains cas, les concepteurs de langage peuvent traiter la bibliothèque comme une entité distincte du langage. Cependant, la bibliothèque principale d’un langage est souvent considérée comme faisant partie du langage par ses utilisateurs, et certaines spécifications de langage exigent même que cette bibliothèque soit disponible dans toutes les implémentations. En effet, certains langages sont conçus de sorte que les significations de certaines constructions syntaxiques ne peuvent même pas être décrites sans se référer à la bibliothèque principale. Par exemple, en Java , un littéral de chaîne est défini comme une instance de la java.lang.Stringclasse ; de même, dans Smalltalk , une expression de fonction anonyme (un “bloc”) construit une instance de la BlockContextclasse de la bibliothèque. Inversement,Scheme contient plusieurs sous-ensembles cohérents qui suffisent à construire le reste du langage en tant que macros de bibliothèque, et donc les concepteurs de langage ne prennent même pas la peine de dire quelles parties du langage doivent être implémentées en tant que constructions de langage, et lesquelles doivent être implémentées en tant que parties d’un bibliothèque.

Conception et mise en œuvre

Les langages de programmation partagent des propriétés avec les langages naturels liés à leur objectif en tant que véhicules de communication, ayant une forme syntaxique distincte de sa sémantique et montrant des familles de langages de langages apparentés se ramifiant les uns les autres. [50] [51] Mais en tant que constructions artificielles, elles diffèrent également de manière fondamentale des langues qui ont évolué à travers l’usage. Une différence significative est qu’un langage de programmation peut être entièrement décrit et étudié dans son intégralité puisqu’il a une définition précise et finie. [52] En revanche, les langues naturelles ont des significations changeantes données par leurs utilisateurs dans différentes communautés. Alors que les langues construitessont également des langages artificiels conçus à partir de zéro dans un but précis, ils manquent de la définition sémantique précise et complète dont dispose un langage de programmation.

De nombreux langages de programmation ont été conçus à partir de zéro, modifiés pour répondre à de nouveaux besoins et combinés avec d’autres langages. Beaucoup sont finalement tombés en désuétude. Bien qu’il y ait eu des tentatives pour concevoir un langage de programmation “universel” qui sert à tous les objectifs, tous n’ont pas été généralement acceptés comme remplissant ce rôle. [53] Le besoin de divers langages de programmation découle de la diversité des contextes dans lesquels les langages sont utilisés :

  • Les programmes vont de minuscules scripts écrits par des amateurs individuels à d’énormes systèmes écrits par des centaines de programmeurs .
  • L’expertise des programmeurs varie des novices qui ont besoin de simplicité avant tout aux experts qui peuvent être à l’aise avec une complexité considérable.
  • Les programmes doivent équilibrer vitesse, taille et simplicité sur des systèmes allant des microcontrôleurs aux superordinateurs .
  • Les programmes peuvent être écrits une seule fois et ne pas changer pendant des générations, ou ils peuvent subir des modifications continuelles.
  • Les programmeurs peuvent simplement différer dans leurs goûts : ils peuvent être habitués à discuter des problèmes et à les exprimer dans une langue particulière.

Une tendance commune dans le développement des langages de programmation a été d’ajouter plus de capacité à résoudre des problèmes en utilisant un niveau d’ abstraction plus élevé . Les premiers langages de programmation étaient étroitement liés au matériel sous-jacent de l’ordinateur. Au fur et à mesure que de nouveaux langages de programmation se sont développés, des fonctionnalités ont été ajoutées qui permettent aux programmeurs d’exprimer des idées qui sont plus éloignées de la simple traduction en instructions matérielles sous-jacentes. Parce que les programmeurs sont moins liés à la complexité de l’ordinateur, leurs programmes peuvent faire plus de calcul avec moins d’effort de la part du programmeur. Cela leur permet d’écrire plus de fonctionnalités par unité de temps. [54]

La programmation en langage naturel a été proposée comme un moyen d’éliminer le besoin d’un langage spécialisé pour la programmation. Cependant, cet objectif reste lointain et ses avantages sont sujets à débat. Edsger W. Dijkstra a adopté la position selon laquelle l’utilisation d’un langage formel est essentielle pour empêcher l’introduction de constructions dénuées de sens, et a rejeté la programmation en langage naturel comme «insensée». [55] Alan Perlis était également dédaigneux de l’idée. [56] Des approches hybrides ont été adoptées en anglais structuré et SQL .

Les concepteurs et les utilisateurs d’un langage doivent construire un certain nombre d’artefacts qui régissent et permettent la pratique de la programmation. Les plus importants de ces artefacts sont la spécification et l’ implémentation du langage .

spécification

La spécification d’un langage de programmation est un artefact que les utilisateurs du langage et les implémenteurs peuvent utiliser pour se mettre d’accord sur le fait qu’un morceau de code source est un programme valide dans ce langage, et si tel est le cas, quel doit être son comportement.

Une spécification de langage de programmation peut prendre plusieurs formes, dont les suivantes :

  • Une définition explicite de la syntaxe, de la sémantique statique et de la sémantique d’exécution du langage. Alors que la syntaxe est généralement spécifiée à l’aide d’une grammaire formelle, les définitions sémantiques peuvent être écrites en langage naturel (par exemple, comme dans le langage C ), ou une sémantique formelle (par exemple, comme dans les spécifications Standard ML [57] et Scheme [58] ).
  • Une description du comportement d’un traducteur pour le langage (par exemple, les spécifications C++ et Fortran ). La syntaxe et la sémantique du langage doivent être déduites de cette description, qui peut être écrite en langage naturel ou formel.
  • Une implémentation de référence ou de modèle , parfois écrite dans le langage spécifié (par exemple, Prolog ou ANSI REXX [59] ). La syntaxe et la sémantique du langage sont explicites dans le comportement de l’implémentation de référence.

Mise en œuvre

Une implémentation d’un langage de programmation permet d’écrire des programmes dans ce langage et de les exécuter sur une ou plusieurs configurations matérielles et logicielles. Il existe, en gros, deux approches de l’implémentation d’un langage de programmation : la compilation et l’ interprétation . Il est généralement possible d’implémenter un langage en utilisant l’une ou l’autre technique.

La sortie d’un compilateur peut être exécutée par du matériel ou un programme appelé interpréteur. Dans certaines implémentations qui utilisent l’approche de l’interpréteur, il n’y a pas de frontière distincte entre la compilation et l’interprétation. Par exemple, certaines implémentations de BASIC compilent puis exécutent la source une ligne à la fois.

Les programmes qui sont exécutés directement sur le matériel s’exécutent généralement beaucoup plus rapidement que ceux qui sont interprétés dans le logiciel. [60] [ meilleure source nécessaire ]

Une technique pour améliorer les performances des programmes interprétés est la compilation juste-à-temps . Ici la machine virtuelle , juste avant l’exécution, traduit les blocs de bytecode qui vont être utilisés en code machine, pour une exécution directe sur le matériel.

Langages propriétaires

Bien que la plupart des langages de programmation les plus couramment utilisés aient des spécifications et des implémentations entièrement ouvertes, de nombreux langages de programmation n’existent qu’en tant que langages de programmation propriétaires, l’implémentation n’étant disponible que chez un seul fournisseur, qui peut prétendre qu’un tel langage propriétaire est sa propriété intellectuelle. Les langages de programmation propriétaires sont généralement des langages spécifiques à un domaine ou des langages de script internes pour un seul produit; certains langages propriétaires ne sont utilisés qu’en interne au sein d’un fournisseur, tandis que d’autres sont disponibles pour les utilisateurs externes.

Certains langages de programmation existent à la frontière entre propriétaire et ouvert ; par exemple, Oracle Corporation revendique des droits de propriété sur certains aspects du langage de programmation Java , [61] et le langage de programmation C # de Microsoft , qui a des implémentations ouvertes de la plupart des parties du système, a également Common Language Runtime (CLR) comme un fermé environnement. [62]

De nombreux langages propriétaires sont largement utilisés, malgré leur nature propriétaire ; les exemples incluent MATLAB , VBScript et Wolfram Language . Certaines langues peuvent faire la transition de fermé à ouvert; par exemple, Erlang était à l’origine un langage de programmation interne d’Ericsson. [63]

Utiliser

Des milliers de langages de programmation différents ont été créés, principalement dans le domaine informatique. [64] Les projets de logiciels individuels utilisent généralement cinq langages de programmation ou plus. [65]

Les langages de programmation diffèrent de la plupart des autres formes d’expression humaine en ce sens qu’ils nécessitent un plus grand degré de précision et d’exhaustivité. Lorsqu’ils utilisent un langage naturel pour communiquer avec d’autres personnes, les auteurs et les locuteurs humains peuvent être ambigus et faire de petites erreurs, tout en s’attendant à ce que leur intention soit comprise. Cependant, au sens figuré, les ordinateurs “font exactement ce qu’on leur dit de faire” et ne peuvent pas “comprendre” quel code le programmeur avait l’intention d’écrire. La combinaison de la définition du langage, d’un programme et des entrées du programme doit spécifier entièrement le comportement externe qui se produit lorsque le programme est exécuté, dans le domaine de contrôle de ce programme. D’autre part,, qui entrelace le langage naturel avec du code écrit dans un langage de programmation.

Un langage de programmation fournit un mécanisme structuré pour définir des données, et les opérations ou transformations qui peuvent être effectuées automatiquement sur ces données. Un programmeur utilise les abstractions présentes dans le langage pour représenter les concepts impliqués dans un calcul. Ces concepts sont représentés comme une collection des éléments les plus simples disponibles (appelés primitives ). [66] La programmation est le processus par lequel les programmeurs combinent ces primitives pour composer de nouveaux programmes ou adapter ceux qui existent déjà à de nouvelles utilisations ou à un environnement changeant.

Les programmes pour un ordinateur peuvent être exécutés dans un processus par lots sans interaction humaine, ou un utilisateur peut taper des commandes dans une session interactive d’un interpréteur . Dans ce cas les “commandes” sont simplement des programmes, dont l’exécution s’enchaîne. Lorsqu’un langage peut exécuter ses commandes via un interpréteur (tel qu’un shell Unix ou une autre interface de ligne de commande ), sans compiler, on l’appelle un langage de script . [67]

Mesurer l’utilisation de la langue

Il est difficile de déterminer quel est le langage de programmation le plus largement utilisé car la définition de l’utilisation varie selon le contexte. Un langage peut occuper le plus grand nombre d’heures de programmeur, un autre a plus de lignes de code et un troisième peut consommer le plus de temps CPU. Certains langages sont très populaires pour des types particuliers d’applications. Par exemple, COBOL est toujours fort dans le centre de données d’entreprise, souvent sur de gros mainframes ; [68] [69] Fortran dans les applications scientifiques et techniques ; Ada dans les applications aérospatiales, de transport, militaires, temps réel et embarquées ; et Cdans les applications embarquées et les systèmes d’exploitation. D’autres langages sont régulièrement utilisés pour écrire de nombreux types d’applications.

Diverses méthodes de mesure de la popularité de la langue, chacune sujette à un biais différent sur ce qui est mesuré, ont été proposées :

  • compter le nombre d’offres d’emploi mentionnant la langue [70]
  • le nombre de livres vendus qui enseignent ou décrivent la langue [71]
  • estimations du nombre de lignes de code existantes écrites dans la langue – ce qui peut sous-estimer les langues que l’on ne trouve pas souvent dans les recherches publiques [72]
  • nombre de références linguistiques (c’est-à-dire au nom de la langue) trouvées à l’aide d’un moteur de recherche Web.

En combinant et en faisant la moyenne des informations de divers sites Internet, stackify.com a signalé les dix langages de programmation les plus populaires comme (par ordre décroissant de popularité globale) : Java , C , C++ , Python , C# , JavaScript , VB .NET , R , PHP et MATLAB . [73]

Dialectes, saveurs et implémentations

Un dialecte d’un langage de programmation ou d’un langage d’échange de données est une variation ou une extension (relativement petite) du langage qui ne change pas sa nature intrinsèque. Avec des langages tels que Scheme et Forth , les normes peuvent être considérées comme insuffisantes, inadéquates ou illégitimes par les implémenteurs, si souvent qu’elles s’écartent de la norme, créant un nouveau dialecte . Dans d’autres cas, un dialecte est créé pour être utilisé dans une langue spécifique à un domaine , souvent un sous-ensemble. Dans le monde Lisp , la plupart des langages qui utilisent la syntaxe d’expression S de base et la sémantique de type Lisp sont considérés comme des dialectes Lisp, bien qu’ils varient énormément, comme le font, par exemple, Racketet Clojuré . Comme il est courant qu’une langue ait plusieurs dialectes, il peut devenir assez difficile pour un programmeur inexpérimenté de trouver la bonne documentation. Le langage de programmation BASIC a de nombreux dialectes .

L’explosion des dialectes Forth a conduit au dicton “Si vous avez vu un Forth … vous avez vu un Forth.”

Taxonomies

Il n’y a pas de système de classification global pour les langages de programmation. Un langage de programmation donné n’a généralement pas un seul langage ancêtre. Les langues naissent généralement en combinant les éléments de plusieurs langues prédécesseurs avec de nouvelles idées en circulation à l’époque. Les idées qui proviennent d’une langue se diffusent dans une famille de langues apparentées, puis sautent soudainement à travers les lacunes familiales pour apparaître dans une famille entièrement différente.

La tâche est encore compliquée par le fait que les langues peuvent être classées selon plusieurs axes. Par exemple, Java est à la fois un langage orienté objet (car il encourage l’organisation orientée objet) et un langage concurrent (car il contient des constructions intégrées pour exécuter plusieurs threads en parallèle). Python est un langage de script orienté objet .

Dans les grandes lignes, les langages de programmation se divisent en paradigmes de programmation et en une classification par domaine d’utilisation prévu, les langages de programmation à usage général se distinguant des langages de programmation spécifiques à un domaine . Traditionnellement, les langages de programmation ont été considérés comme décrivant le calcul en termes de phrases impératives, c’est-à-dire émettant des commandes. Ceux-ci sont généralement appelés langages de programmation impératifs . De nombreuses recherches sur les langages de programmation ont eu pour objectif de brouiller la distinction entre un programme en tant qu’ensemble d’instructions et un programme en tant qu’assertion sur la réponse souhaitée, ce qui est la principale caractéristique de la programmation déclarative . [74]Des paradigmes plus raffinés incluent la programmation procédurale , la programmation orientée objet , la programmation fonctionnelle et la programmation logique ; certaines langues sont des hybrides de paradigmes ou multi-paradigmatiques. Un langage d’assemblage n’est pas tant un paradigme qu’un modèle direct d’une architecture de machine sous-jacente. Par objectif, les langages de programmation peuvent être considérés comme des langages à usage général, des langages de programmation système, des langages de script, des langages spécifiques à un domaine ou des langages concurrents/distribués (ou une combinaison de ceux-ci). [75] Certaines langues à usage général ont été conçues en grande partie avec des objectifs éducatifs. [76]

Un langage de programmation peut également être classé par des facteurs sans rapport avec le paradigme de programmation. Par exemple, la plupart des langages de programmation utilisent des mots-clés en anglais , alors qu’une minorité ne le fait pas . D’autres langues peuvent être classées comme étant délibérément ésotériques ou non.

Voir également

  • icon iconPortail de programmation informatique
  • Comparaison des langages de programmation (instructions de base)
  • Comparaison des langages de programmation
  • Programmation informatique
  • Informatique et aperçu de l’informatique
  • Langage spécifique au domaine
  • Modélisation spécifique au domaine
  • Langage de programmation pédagogique
  • Langage de programmation ésotérique
  • Programmation extensible
  • Catégorie:Langages de programmation à syntaxe extensible
  • Programmation basée sur les invariants
  • Liste des dialectes BASIC
  • Listes de langages de programmation
  • Liste des chercheurs en langage de programmation
  • Langages de programmation utilisés dans les sites Web les plus populaires
  • Programmation orientée langage
  • Programmation logique
  • Programmation littéraire
  • Métaprogrammation
    • Ruby (langage de programmation) § Métaprogrammation
  • Langage de modélisation
  • Théorie des langages de programmation
  • Pseudocode
  • Rebol § Dialectes
  • Réflexion
  • Langage de programmation scientifique
  • Langage de script
  • Génie logiciel et liste des sujets de génie logiciel

Références

  1. ^ Ettinger, James (2004) Web de Jacquard , Oxford University Press
  2. ^ un bc Aaby , Anthony (2004). Introduction aux langages de programmation . Archivé de l’original le 8 novembre 2012 . Récupéré le 29 septembre 2012 .
  3. ^ En termes mathématiques, cela signifie que le langage de programmation est Turing-complet MacLennan, Bruce J. (1987). Principes des langages de programmation . Presse universitaire d’Oxford. p. 1. ISBN 978-0-19-511306-8.
  4. ^ ACM SIGPLAN (2003). “Règlements du groupe d’intérêt spécial sur les langages de programmation de l’Association for Computing Machinery” . Archivé de l’original le 22 juin 2006. , “La portée de SIGPLAN est la théorie, la conception, la mise en œuvre, la description et l’application des langages de programmation informatique – des langages qui permettent la spécification d’une variété de calculs différents, offrant ainsi à l’utilisateur un contrôle significatif (immédiat ou différé) sur le fonctionnement de l’ordinateur. opération.”
  5. ^ Doyen, Tom (2002). “Programmer des robots” . Construire des robots intelligents . Département d’informatique de l’Université Brown. Archivé de l’original le 29 octobre 2006.
  6. ^ R. Narasimahan, Langages de programmation et ordinateurs: une métathéorie unifiée, pp. 189-247 dans Franz Alt, Morris Rubinoff (eds.) Advances in computer, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5 , p.193 : “une spécification complète d’un langage de programmation doit, par définition, inclure une spécification d’un processeur — idéalisé, si vous voulez — pour ce langage.” [la source cite de nombreuses références pour étayer cette affirmation]
  7. ^ Ben Ari, Mordechai (1996). Comprendre les langages de programmation . John Wiley et fils. Les programmes et les langages peuvent être définis comme des objets mathématiques purement formels. Cependant, plus de gens s’intéressent aux programmes qu’aux autres objets mathématiques tels que les groupes, précisément parce qu’il est possible d’utiliser le programme – la séquence de symboles – pour contrôler l’exécution d’un ordinateur. Bien que nous recommandions fortement l’étude de la théorie de la programmation, ce texte se limitera généralement à l’étude des programmes tels qu’ils sont exécutés sur un ordinateur.
  8. ^ David A. Schmidt, La structure des langages de programmation typés , MIT Press, 1994, ISBN 0-262-19349-3 , p. 32
  9. ^ Pierce, Benjamin (2002). Types et langages de programmation . Presse du MIT. p. 339 . ISBN 978-0-262-16209-8.
  10. ^ Société d’équipement numérique. “Technologies de l’information – Langage de base de données SQL (texte révisé proposé du DIS 9075)” . ISO/CEI 9075:1992, Langage de base de données SQL . Archivé de l’original le 21 juin 2006 . Récupéré le 29 juin 2006 .
  11. ^ Le groupe de développement caritatif (décembre 1996). “La page d’accueil de la CHARITÉ” . Archivé de l’original le 18 juillet 2006. , “Charity est un langage de programmation catégorique…”, “Tous les calculs de Charity se terminent.”
  12. ^ XML en 10 points Archivé le 6 septembre 2009 au Wayback Machine W3C , 1999, “XML n’est pas un langage de programmation.”
  13. ^ Powell, Thomas (2003). HTML & XHTML : la référence complète . McGraw-Hill. p. 25. ISBN 978-0-07-222942-4. HTML n’est pas un langage de programmation.
  14. ^ Dykes, Lucinda; Titre, Ed (2005). XML pour les nuls (4e éd.). Wiley. p. 20 . ISBN 978-0-7645-8845-7. … c’est un langage de balisage, pas un langage de programmation.
  15. ^ “Quel type de langage est XSLT?” . IBM.com. 20 avril 2005. Archivé de l’original le 11 mai 2011.
  16. ^ “XSLT est un langage de programmation” . msdn.microsoft.com. Archivé de l’original le 3 février 2011 . Récupéré le 3 décembre 2010 .
  17. ^ Scott, Michael (2006). Pragmatique des langages de programmation . Morgan Kaufman . p. 802 . ISBN 978-0-12-633951-2. XSLT, bien que hautement spécialisé dans la transformation de XML, est un langage de programmation complet de Turing.
  18. ^ Oetiker, Tobias; Partl, Hubert; Hyna, Irène; Schlegl, Elisabeth (20 juin 2016). “L’introduction pas si courte à LATEX 2ε” (Version 5.06) . tobi.oetiker.ch . p. 1–157. Archivé (PDF) de l’original le 14 mars 2017.
  19. ^ Syropoulos, Apostolos; Antonis Tsolomitis ; Nick Sofroniou (2003). Typographie numérique avec LaTeX . Springer Verlag. p. 213 . ISBN 978-0-387-95217-8. TeX n’est pas seulement un excellent moteur de composition mais aussi un véritable langage de programmation.
  20. ^ Robert A. Edmunds, Le glossaire standard Prentice-Hall de la terminologie informatique, Prentice-Hall, 1985, p. 91
  21. ^ Pascal Lando, Anne Lapujade, Gilles Kassel et Frédéric Fürst, Vers une ontologie générale des programmes informatiques Archivé le 7 juillet 2015 à la Wayback Machine , ICSOFT 2007 Archivé le 27 avril 2010 à la Wayback Machine , pp. 163-170
  22. ^ SK Bajpai, Introduction aux ordinateurs et à la programmation C , New Age International, 2007, ISBN 81-224-1379-X , p. 346
  23. ^ R. Narasimahan, Langages de programmation et ordinateurs: une métathéorie unifiée, pp. 189-247 dans Franz Alt, Morris Rubinoff (eds.) Advances in computer, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5 , p.215: “[…] le modèle […] des langages informatiques diffère de celui […] des langages de programmation à deux égards seulement. Dans un langage informatique, il n’y a qu’un nombre fini de noms – ou registres – qui ne peuvent prendre qu’un nombre fini de valeurs – ou d’états – et ces états ne sont pas davantage distingués en termes d’autres attributs [note de l’auteur :] Cela peut sembler un truisme, mais ses implications sont considérables. Par exemple, impliquent que tout modèle de langage de programmation, en fixant certains de ses paramètres ou caractéristiques, soit réductible de façon naturelle à un modèle de langage informatique.
  24. ^ John C. Reynolds, “Quelques réflexions sur l’enseignement de la programmation et des langages de programmation”, SIGPLAN Notices , Volume 43, Numéro 11, novembre 2008, p.109
  25. ^ Rojas, Raúl et al. (2000). “Plankalkül: Le premier langage de programmation de haut niveau et sa mise en œuvre”. Institut für Informatik, Freie Universität Berlin, rapport technique B-3/2000. (texte intégral) Archivé le 18 octobre 2014 sur la Wayback Machine
  26. ^ Sebesta, WS Concepts des langages de programmation. 2006;M6 14:18 p.44. ISBN 0-321-33025-0
  27. ^ Knuth, Donald E.; Pardo, Luis Trabb. “Développement précoce des langages de programmation”. Encyclopédie de l’informatique et de la technologie . 7 : 419–493.
  28. ^ Peter J. Bentley (2012). Numérisé : la science des ordinateurs et comment elle façonne notre monde . Presse universitaire d’Oxford. p. 87. ISBN 9780199693795. Archivé de l’original le 29 août 2016.
  29. ^ “Le créateur de Fortran, John Backus, meurt – Technologie et gadgets” . Nouvelles NBC. 20 mars 2007 . Récupéré le 25 avril 2010 .
  30. ^ “CSC-302 99S : Classe 02 : Une brève histoire des langages de programmation” . Math.grin.edu. Archivé de l’original le 15 juillet 2010 . Récupéré le 25 avril 2010 .
  31. ^ Eugène Loh (18 juin 2010). “Le langage de programmation HPC idéal” . File d’attente . 8 (6). Archivé de l’original le 4 mars 2016.
  32. ^ “HPL – Une implémentation portable de la référence Linpack haute performance pour les ordinateurs à mémoire distribuée” . Archivé de l’original le 15 février 2015 . Récupéré le 21 février 2015 .
  33. ^ Trémie (1978) p. 16.
  34. ^ Sammet (1969) p. 316
  35. ^ Sammet (1978) p. 204.
  36. ^ Richard L. Wexelblat : Histoire des langages de programmation , Academic Press, 1981, chapitre XIV.
  37. François Labelle. “Graphique d’utilisation du langage de programmation” . SourceForge . Archivé de l’original le 17 juin 2006 . Récupéré le 21 juin 2006 . . Cette comparaison analyse les tendances du nombre de projets hébergés par un référentiel de programmation communautaire populaire. Pendant la plupart des années de comparaison, C mène par une marge considérable ; en 2006, Java dépasse le C, mais la combinaison C/C++ mène toujours considérablement.
  38. ^ Hayes, Brian (2006). “Les guerres du point-virgule”. Scientifique américain . 94 (4): 299–303. doi : 10.1511/2006.60.299 .
  39. ^ Dijkstra, Edsger W. (mars 1968). “Aller à la déclaration considérée comme nuisible” (PDF) . Communications de l’ACM . 11 (3): 147–148. doi : 10.1145/362929.362947 . S2CID 17469809 . Archivé (PDF) de l’original le 13 mai 2014.
  40. ^ Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (décembre 1994). “KLIC : une implémentation portable de KL1” Proc. of FGCS ’94, ICOT Tokyo, décembre 1994. “Copie archivée” . Archivé de l’original le 25 septembre 2006 . Récupéré le 9 octobre 2006 .{{cite web}}: CS1 maint: archived copy as title (link)KLIC est une implémentation portable d’un langage de programmation logique concurrente KL1 .
  41. ^ Jim Bender (15 mars 2004). “Mini-bibliographie sur les modules pour les langages de programmation fonctionnels” . ReadScheme.org . Archivé de l’original le 24 septembre 2006.
  42. ^ Michael Sipser (1996). Introduction à la théorie du calcul . Édition PWS. ISBN 978-0-534-94728-6.Section 2.2 : Automates à pile, pp.101–114.
  43. ^ Jeffrey Kegler, ” Perl et indécidabilité Archivé le 17 août 2009 à la Wayback Machine “, The Perl Review . Les articles 2 et 3 prouvent, en utilisant respectivement le théorème de Rice et la réduction directe au problème d’arrêt , que l’analyse syntaxique des programmes Perl est en général indécidable.
  44. ^ Marty Hall, 1995, Lecture Notes: Macros Archivé le 6 août 2013 à la Wayback Machine , version PostScript Archivé le 17 août 2000 à la Wayback Machine
  45. ^ Michael Lee Scott, pragmatique du langage de programmation , édition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1 , p. 18–19
  46. ^ un bcdefg Andrew Cooke . _ _ _ « Introduction aux langages informatiques » . Archivé de l’original le 15 août 2012 . Récupéré le 13 juillet 2012 .
  47. ^ Plus précisément, les instanciations de types génériques sont déduites pour certaines formes d’expression. L’inférence de type dans GenericJava – le langage de recherche qui a servi de base aux extensions de polymorphisme paramétrique borné de Java 1.5- est discutée dans deux manuscrits informels de la liste de diffusion Types : L’inférence de type Java générique n’est pas valable Alan Jeffrey , 17 décembre 2001) et l’inférence de type Sound Generic Java Archivé le 29 janvier 2007 à la Wayback Machine ( Martin Odersky , 15 janvier 2002). Le système de type de C # est similaire à celui de Java et utilise un schéma d’inférence de type partiel similaire.
  48. ^ “Rapport révisé sur le schéma de langage algorithmique” . 20 février 1998. Archivé de l’original le 14 juillet 2006.
  49. ^ Luca Cardelli et Peter Wegner . “Sur les types de compréhension, l’abstraction de données et le polymorphisme” . Manuscrit (1985) . Archivé de l’original le 19 juin 2006.
  50. ^ Steven R. Fischer, Une histoire du langage , Reaktion Books, 2003, ISBN 1-86189-080-X , p. 205
  51. ^ Éric Lévénez (2011). “Histoire des langages informatiques” . Archivé de l’original le 7 janvier 2006.
  52. ^ Jing Huang. “Langage artificiel contre langage naturel” . Archivé de l’original le 3 septembre 2009.
  53. ^ IBM dans sa première publication PL/I, par exemple, a intitulé son manuel de manière assez ambitieuse Le langage de programmation universel PL/I (IBM Library; 1966). Le titre reflétait les objectifs d’IBM pour une capacité de sous-ensembles illimitée: “PL / I est conçu de telle manière que l’on peut en isoler des sous-ensembles répondant aux exigences d’applications particulières.” ( “PL/I” . Encyclopedia of Mathematics . Archivé de l’original le 26 avril 2012 . Récupéré le 29 juin 2006 .). Ada et UNCOL avaient des objectifs similaires au départ.
  54. ^ Frederick P. Brooks, Jr .: Le mois de l’homme mythique , Addison-Wesley, 1982, pp. 93–94
  55. ^ Dijkstra, Edsger W. Sur la folie de la “programmation en langage naturel”. Archivé le 20 janvier 2008 sur la Wayback Machine EWD667.
  56. ^ Perlis, Alan (septembre 1982). “Épigrammes sur la programmation” . Avis SIGPLAN Vol. 17, n° 9 . p. 7–13. Archivé de l’original le 17 janvier 1999.
  57. ^ Milner, R. ; M. Tofté ; R. Harper ; D. MacQueen (1997). La définition du ML standard (révisée) . Presse du MIT. ISBN 978-0-262-63181-5.
  58. ^ Kelsey, Richard; Guillaume Clinger; Jonathan Rees (février 1998). “Section 7.2 Sémantique formelle” . Révisé 5 Rapport sur le schéma de langage algorithmique . Archivé de l’original le 6 juillet 2006.
  59. ^ ANSI – Langage de programmation Rexx, X3-274.1996
  60. ^ Steve, McConnell (2004). Code complet (deuxième éd.). Redmond, Washington. pages 590, 600 . ISBN 0735619670. OCLC 54974573 .
  61. ^ Voir: Oracle America, Inc. contre Google, Inc.
  62. ^ “Guide des langages de programmation | ComputerScience.org” . ComputerScience.org . Récupéré le 13 mai 2018 .
  63. ^ “Les bases” . ibm.com . 10 mai 2011 . Récupéré le 13 mai 2018 .
  64. ^ “HOPL : une liste interactive de langages de programmation” . Australie : Université Murdoch . Archivé de l’original le 20 février 2011 . Récupéré le 1er juin 2009 . Ce site répertorie 8512 langues.
  65. ^ Mayer, Philippe; Bauer, Alexandre (2015). Une analyse empirique de l’utilisation de plusieurs langages de programmation dans des projets open source . Actes de la 19e Conférence internationale sur l’évaluation et l’évaluation en génie logiciel – EASE ’15. New York, NY, États-Unis : ACM. pp. 4:1–4:10. doi : 10.1145/2745802.2745805 . ISBN 978-1-4503-3350-4. Résultats : Nous avons trouvé (a) un nombre moyen de 5 langues par projet avec un langage généraliste principal clairement dominant et 5 types de DSL souvent utilisés, (b) une influence significative de la taille, du nombre de commits et de la langue principale sur le nombre de langages ainsi que sur l’absence d’influence significative de l’âge et du nombre de contributeurs, et (c) trois écosystèmes de langages regroupés autour de XML, Shell/Make et HTML/CSS. Conclusions : La programmation multilingue semble être courante dans les projets open source et constitue un facteur qui doit être pris en compte dans l’outillage et lors de l’évaluation du développement et de la maintenance de tels systèmes logiciels.
  66. ^ Abelson, Sussman et Sussman. “Structure et interprétation des programmes informatiques” . Archivé de l’original le 26 février 2009 . Récupéré le 3 mars 2009 . {{cite web}}: CS1 maint: multiple names: authors list (link)
  67. ^ Brown Vicki (1999). “Langages de script” . mactech.com . Archivé de l’original le 2 décembre 2017.
  68. ^ Georgina Swan (21 septembre 2009). “COBOL fête ses 50 ans” . computerworld.com.au. Archivé de l’original le 19 octobre 2013 . Récupéré le 19 octobre 2013 .
  69. ^ Ed Airey (3 mai 2012). “7 mythes de COBOL démystifiés” . développeur.com. Archivé de l’original le 19 octobre 2013 . Récupéré le 19 octobre 2013 .
  70. ^ Nicolas Enticknap. “Enquête SSL/Computer Weekly sur les salaires en informatique : le boom de la finance stimule la croissance de l’emploi en informatique” . Ordinateur hebdomadaire . Archivé de l’original le 26 octobre 2011 . Récupéré le 14 juin 2013 .
  71. ^ “Compter les langages de programmation par les ventes de livres” . Radar.oreilly.com. 2 août 2006. Archivé de l’original le 17 mai 2008.
  72. ^ Bieman, JM; Murdock, V., Trouver du code sur le World Wide Web: une enquête préliminaire, Actes du premier atelier international de l’IEEE sur l’analyse et la manipulation du code source, 2001
  73. ^ “Langages de programmation les plus populaires et les plus influents de 2018” . stackify.com. 18 décembre 2017 . Récupéré le 29 août 2018 .
  74. ^ Carl A. Gunter, Sémantique des langages de programmation : structures et techniques , MIT Press, 1992, ISBN 0-262-57095-5 , p. 1
  75. ^ “TUNES : Langages de programmation” . Archivé de l’original le 20 octobre 2007.
  76. ^ Wirth, Niklaus (1993). “Souvenirs sur l’évolution de Pascal”. La deuxième conférence ACM SIGPLAN sur l’histoire des langages de programmation – HOPL-II . Proc. 2ème Conférence ACM SIGPLAN sur l’histoire des langages de programmation . Vol. 28. pp. 333–342. CiteSeerX 10.1.1.475.6989 . doi : 10.1145/154766.155378 . ISBN 978-0-89791-570-0. S2CID 9783524 .

Lectures complémentaires

  • Abelson, Harold ; Sussman, Gerald Jay (1996). Structure et interprétation des programmes informatiques (2e éd.). Presse du MIT. Archivé de l’original le 9 mars 2018.
  • Raphael Finkel : Conception de langage de programmation avancée , Addison Wesley 1995.
  • Daniel P. Friedman , Mitchell Wand , Christopher T. Haynes : L’essentiel des langages de programmation , The MIT Press 2001.
  • Maurizio Gabbrielli et Simone Martini : “Langages de programmation : principes et paradigmes”, Springer, 2010.
  • David Gelernter , Suresh Jagannathan : Programmation linguistique , The MIT Press 1990.
  • Ellis Horowitz (éd.): Langages de programmation, un grand tour (3e éd.), 1987.
  • Ellis Horowitz : Principes fondamentaux des langages de programmation , 1989.
  • Shriram Krishnamurthi : Langages de programmation : application et interprétation , publication en ligne .
  • Bruce J. MacLennan : Principes des langages de programmation : conception, évaluation et implémentation , Oxford University Press 1999.
  • John C. Mitchell : Concepts dans les langages de programmation , Cambridge University Press 2002.
  • Benjamin C. Pierce : Types et langages de programmation , The MIT Press 2002.
  • Terrence W. Pratt et Marvin Victor Zelkowitz : Langages de programmation : conception et implémentation (4e éd.), Prentice Hall 2000.
  • Peter H. Salus . Manuel des langages de programmation (4 vol.). Macmillan 1998.
  • Ravi Sethi : Langages de programmation : concepts et constructions , 2e éd., Addison-Wesley 1996.
  • Michael L. Scott : Pragmatique du langage de programmation , Morgan Kaufmann Publishers 2005.
  • Robert W. Sebesta : Concepts des langages de programmation , 9e éd., Addison Wesley 2009.
  • Franklyn Turbak et David Gifford avec Mark Sheldon : Design Concepts in Programming Languages ​​, The MIT Press 2009.
  • Peter Van Roy et Seif Haridi . Concepts, techniques et modèles de programmation informatique , The MIT Press 2004.
  • David A. Watt . Concepts et paradigmes des langages de programmation . Prentice Hall 1990.
  • David A. Watt et Muffy Thomas . Syntaxe et sémantique des langages de programmation . Prentice Hall 1991.
  • David A. Watt. Processeurs de langage de programmation . Prentice Hall 1993.
  • David A. Watt. Concepts de conception de langage de programmation . John Wiley et fils 2004.

Liens externes

Langage de programmationdans les projets frères de Wikipédia

  • Définitions du Wiktionnaire
  • Médias de Commons
  • Nouvelles de Wikinews
  • Citations de Wikiquote
  • Manuels de Wikibooks
  • Ressources de Wikiversité
  • Données de Wikidata
You might also like
Leave A Reply

Your email address will not be published.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More