Langage De Programmation

ÔĽŅ
Langage De Programmation

Langage de programmation

Un langage de programmation est un langage informatique, permettant à un être humain d'écrire un code source qui sera analysé par une machine, généralement un ordinateur. Le code source subit ensuite une transformation ou une évaluation dans une forme exploitable par la machine, ce qui permet d'obtenir un programme. Les langages permettent souvent de faire abstraction des mécanismes bas niveaux de la machine, de sorte que le code source représentant une solution puisse être rédigé et compris par un être humain.

L'activit√© de r√©daction du code source d'un programme est nomm√©e programmation. Elle consiste en la mise en Ňďuvre de techniques d'√©criture et de r√©solution d'algorithmes informatiques, lesquelles sont fond√©es sur les math√©matiques. √Ä ce titre, un langage de programmation se distingue du langage math√©matique par sa vis√©e op√©rationnelle (une fonction et par extension, un programme, doit retourner une valeur), de sorte qu'un ¬ę langage de programmation est toujours un compromis entre la puissance d'expression et la possibilit√© d'ex√©cution.[1] ¬Ľ

Sommaire

Généralités

D'un point de vue math√©matique, un langage de programmation est un langage formel. Ce langage formel est construit sur un alphabet : les symboles utilis√©s dans le langage. Dans cet alphabet on trouve plusieurs choses :

  • des mots-cl√©,
  • des caract√®res correspondant √† des op√©rateurs (par exemple =,<,& ...),
  • des lettres et chiffres,
  • d'autres caract√®res (comme les accolades, les crochets, ;_ ...).

L'assemblage de ces symboles forment des mots du langage de programmation : des programmes. Pour qu'un mot appartienne au langage, il doit v√©rifier certaines contraintes. Ces contraintes peuvent √™tre exprim√©es gr√Ęce √† la th√©orie des langages dans une grammaire formelle : c'est la syntaxe du langage de programmation.

En associant une sémantique à un langage de programmation, on définit le comportement de la machine qui sera associé aux différentes construction du langage.

Suivant le langage utilis√©, un programme peut √™tre directement interpr√©t√© √† l'aide d'un interpr√®te, ou doit √™tre compil√© vers un autre langage qui pourra √™tre compris par la machine. Il existe deux types de compilation : la compilation vers un langage machine (ou natif), qui sera ex√©cut√© directement par le processeur, et la compilation vers un langage interm√©diaire (ou bytecode), qui sera ex√©cut√© par une machine virtuelle.

D'un point de vue pratique, un langage de programmation permet l'√©criture de programmes par un √™tre humain. Le programmeur n'a pas besoin de conna√ģtre le langage machine, dit de bas niveau, pour √©crire un programme. Le langage de programmation fournit donc une abstraction de haut niveau pour communiquer avec une machine.

Il existe des milliers de langages de programmation, la plupart d'entre eux étant réservés à des domaines spécialisés. Ils font l'objet de recherches constantes dans les universités et dans l'industrie.

Historique des langages de programmation

Particularités des langages de programmation

Les langages de programmation sont tous différents. Ils présentent des particularités, qui font qu'une solution exprimée dans un certain langage peut ressembler à une solution exprimée dans un autre langage. Si c'est le cas, on dit que les langages utilisent le même paradigme ou style. Deux programmes fournissant la solution au même problème, mais écrits avec des paradigmes différents, seront fondamentalement très différents.

Ci-après sont listés certaines caractéristiques courantes parmi les langages de programmation avec des exemples de langages présentant ces caractéristiques.

Toutefois de nombreux langages appartiennent simultan√©ment √† plusieurs cat√©gories ‚ÄĒ ils sont dits ¬ę multi-paradigmes ¬Ľ. Par exemple, C++ permet la programmation imp√©rative, orient√©e objet et la programmation g√©n√©rique (√† base de classes et de fonctions param√©tr√©es nomm√©es templates). Common Lisp est √† la fois imp√©ratif, fonctionnel, orient√© objet ‚ÄĒ et son caract√®re ¬ę programmable ¬Ľ (un langage de programmation programmable‚Ķ) lui permet d'int√©grer d'autres ¬ę paradigmes ¬Ľ de programmation en son sein (par exemple : la programmation logique et la programmation par contraintes).

Langages impératifs

Article d√©taill√© : Programmation imp√©rative.

Les langages machines sont pour la plupart des langages imp√©ratifs. C'est pourquoi les premiers langages de programmation sont √©galement imp√©ratifs : une instruction du langage correspond √† un ensemble d'instructions du langage machine. Les structures de donn√©es et op√©rations sont plus complexes qu'au niveau de la machine, mais le paradigme suivi est le m√™me.

Parmi les langages impératifs figurent COBOL, Fortran, Pascal ou encore le C.

Langages à objets

Article d√©taill√© : Programmation orient√©e objet.

Les langages à objets répondent au besoin de concevoir des programmes complexes. L'objet est une structure élaborée qui permet de rassembler des données et des traitements. En se basant sur une méthode de conception à objet, et un langage de modélisation objet comme UML, on peut facilement transposer la conception dans une implantation avec un langage de programmation à objets.

Parmi les langages à objets sont généralement classés le C++ (une extension du langage C, permettant d'utiliser des objets, il n'est cependant pas purement un langage orienté objet), Python (très orienté objet, ce dernier ne respecte toutefois pas tous les principes de la programmation objet, comme l'encapsulation), Ruby. Ce dernier est un langage purement objet, c'est-à-dire que tout est objet, depuis les types de base, jusqu'à l'interprète ou les blocs d'instructions.

Langages fonctionnels

Article d√©taill√© : Programmation fonctionnelle.

Dans ce paradigme, l'opération de base n'est pas l'affectation contrairement aux langages impératifs, mais l'évaluation de fonctions. Ce paradigme est donc, entre autres, efficace pour modéliser des problèmes qui s'expriment par des valeurs de données, comme en mathématiques, et non pas des états qui changent au cours de l'exécution.

Certains langages fonctionnels, dit ¬ę purs ¬Ľ, interdisent totalement les effets de bord, tels que la mutation des donn√©es. Dans ce cas l√† une variable est li√©e √† une valeur non modifiable. D'autres, au contraire, int√®grent des traits imp√©ratifs et des variables peuvent changer de valeur au cours de l'ex√©cution.

On compte au nombre des langages fonctionnels :

Objective Caml 
langage fonctionnel et impératif,
Haskell 
langage fonctionnel pur à évaluation paresseuse,
Python 
propose certaines fonctionnalités du style fonctionnel, comme l'utilisation de fonctions lambda ou la compréhension de listes.

Langages déclaratifs

Article d√©taill√© : Programmation d√©clarative.

Un langage d√©claratif ne d√©crit pas comment est r√©alis√©e une op√©ration, comme dans un langage imp√©ratif ; c'est au contraire le probl√®me lui-m√™me qui est d√©crit.

Figurent parmi les langages d√©claratifs Oz, Prolog (pour PROgrammation LOGique), Mercury (en), bas√© sur Prolog, ou encore Clips.

Langages à pile

Ces langages ne manipulent que des piles de données. Les opérations sont effectuées sur les éléments du sommet d'une ou plusieurs piles.

Les langages Forth, Factor, PostScript, Joy, Cat ou RPL (HP 48) ressortent de cette catégorie.

Réflexivité

Article d√©taill√© : R√©flexivit√© (informatique).

On dit d'un langage de programmation qu'il est réflexif s'il permet, au moment de l'exécution, d'analyser, de modifier ou en général d'agir sur le fonctionnement interne du programme lui-même.

Le langage Smalltalk fut un précurseur dans le domaine de la réflexivité. Il a d'ailleurs fortement influencé bon nombre de langages réflexifs, tels que Io, Python, Ruby, Java ou Objective-C.

Concurrence

Article d√©taill√© : Programmation concurrente.

La programmation concurrente consiste √† d√©couper un programme en plusieurs fils d'ex√©cution distincts. La concurrence permet, entre autres, de simuler l'ex√©cution de diff√©rentes t√Ęches de fa√ßon simultan√©e. Par exemple, dans le cadre d'une interface graphique, elle permet d'effectuer des t√Ęches en arri√®re plan sans pour autant bloquer l'affichage.

De plus la programmation concurrente permet parfois de tirer parti de ressources distribuées (multiples processeurs, cluster de machines, etc.), ou du système d'ordonnancement de processus du système d'exploitation.

Certains langages intègrent directement la concurrence dans leurs primitives. C'est le cas entre autres des langages Erlang et Concurrent ML. Plus souvent, pour les langages classiques, la concurrence est intégrée par l'intermédiaire de bibliothèques spécifiques. Ainsi, le langage C dispose entre autres de la bibliothèque des threads POSIX. De même, Java dispose d'une classe Thread dans ses bibliothèques standards.

Typage

Article d√©taill√© : Typage.

Le typage est le fait d'attribuer un type aux éléments du code source comme par exemple des variables ou des fonctions. Un type est une catégorie d'objet mathématique ou sémantique, par exemple l'ensemble des entiers ou le type des fonction des listes vers les entiers.

Le genre de type que l'on trouve dans un langage de programmation dépend de sa sémantique (et donc de son paradigme). Par exemple, beaucoup de langages de programmation proposent la notion de variable. Une variable associe un nom à un "objet" et cet objet en question à un type.

Le typage peut √™tre :

Explicite ou implicite 
On parle de typage explicite quand les types apparaissent explicitement dans le code source du programme, et de typage implicite quand ceux-ci n'apparaissent pas et sont déterminés par le compilateur ou l'interprète.
Fort ou faible 
Plus un typage est fort, plus les règles du langage sont strictes et interdisent dès la phase de compilation des manipulations entre données de types différents. On trouve souvent dans les langages typés faiblement la possibilité de faire du transtypage manuel (en anglais cast), ce qui permet de combler les lacunes du système automatique de typage.
Statique ou dynamique 
On parle de typage statique quand la vérification des types se fait dès la phase de compilation, et de typage dynamique lorsque celle-ci est faite durant l'exécution.

Par exemple, le typage du langage C est explicite, relativement fort (le compilateur peut générer des avertissements de typages, le transtypage manuel est permis, mais on peut effectuer n'importe quelle opération entre n'importe quels types sans transtypage), et statique. Le langage Objective Caml possède un typage implicite, fort et statique (son typeur est le fruit de nombreux travaux de recherche scientifique[2]).

Les langages fournissent parfois des m√©canismes pour convertir une valeur d'un type en une valeur dans un autre type. Par exemple on peut convertir un entier en flottant sans aucune perte, par contre l'inverse n'est pas toujours possible. Il ne faut pas confondre la conversion avec le transtypage : le m√©canisme de conversion transforme effectivement la donn√©e, par contre le transtypage se contente de modifier le type associ√©. Ce m√©canisme peut √™tre explicite ou implicite.

Exceptions

Article d√©taill√© : Syst√®me de gestion d'exceptions.

Les exceptions sont des cas limites d'exécution du programme. Si elles sont détectées et gérées, le déroulement du programme est interrompu, et l'exception est traitée. Au contraire d'une erreur qui interrompt le programme de manière inappropriée, le gestion d'une exception permet d'interrompre proprement un programme, ou de repartir en corrigeant l'erreur.

La gestion des exceptions peut être différente selon les langages.

  • Elle peut √™tre simplement inexistante (comme en C).
  • Elle peut offrir un simple signalement de l'exception (comme en C++ ou en Java).
  • Elle peut permettre des traitements plus complexes : par exemple la modification du programme par le programme lui-m√™me (comme en Python) pour reprendre l'ex√©cution "normalement".

Gestion de la mémoire

Les langages de programmation offrent plus ou moins de libertés au programmeur en ce qui concerne la gestion de la mémoire.

  • Certains langages la laissent enti√®rement sous le contr√īle du d√©veloppeur. Il doit alors g√©rer lui-m√™me l'espace m√©moire disponible, les allocations et lib√©rations. C'est par exemple le cas en langage C.
  • Au contraire, tout peut √™tre contr√īl√© par le compilateur ou par le moteur d'ex√©cution. C'est le cas avec le langage Java : m√™me s'il est possible de lui donner des directives, la machine virtuelle g√®re elle-m√™me la m√©moire, √† l'aide d'un ramasse-miettes.
  • Certains langages proposent un syst√®me interm√©diaire. En Objective-C par exemple, un syst√®me de plus haut niveau qu'en C est propos√© pour g√©rer la m√©moire. Il est cependant toujours possible de tout g√©rer soit-m√™me. Il est √©galement possible d'activer explicitement la gestion automatique de la m√©moire.

Syntaxe

Outre les particularit√©s s√©mantiques des langages, ils utilisent √©galement des grammaires diff√©rentes, qui proposent cependant souvent des points communs. Les particularit√©s syntaxiques ne sont souvent que des d√©tails, qui ne changent pas les fonctionnalit√©s propos√©es par les langages de programmation. Par exemple, dans Objective-C 2, il est possible d'utiliser les accesseurs avec deux syntaxes diff√©rentes :

  • object.message
  • ou [object message]

Le résultat est pourtant le même dans les deux cas.

Commentaires

Presque tous les langages de programmation permettent d'écrire des commentaires. Ce sont des parties du programmes qui n'apparaissent pas du tout dans le code produit à la compilation, ou qui ne sont pas interprétées. Les commentaires permettent de documenter le code source.

Par exemple :

  • En Bash, Python, Ruby (entre autres) : tout ce qui suit un # sur une ligne est un commentaire.
  • En C ou PL/SQL, tout ce qui est entre /* et */ est un commentaire.
  • En BASIC et dans les fichiers de commandes de Windows, la commande REM (ou ' qui est une abr√©viation - et le langage BASIC utilise beaucoup d'abr√©viations) est utilis√©e.

Indentation

L'indentation est l'utilisation d'espaces ou tabulations en début de ligne. Pour nombre de langages elle n'a pas d'incidence sur le fonctionnement du programme et ne sert qu'à rendre le code lisible. Pour certains, cependant, comme Python ou Haskell, l'indentation est significative, et même obligatoire. Par exemple, pour Python, l'indentation va servir à définir les sous-instructions d'une fonction, d'une classe ou encore d'un test conditionnel (instructions if, for, while...), alors que le langage C (ou Java) nécessite des accolades ouvrantes et fermantes { }.

Séparation des instructions

Pour distinguer une instruction de la suivante, il existe principalement deux approches :

  • soit la fin d'une instruction est marqu√©e par un terminateur (un ; en C, Java, etc.) ;
  • soit il existe un s√©parateur d'instructions (un ; en Pascal, une fin de ligne en bash ou Python).

La nuance est importante, car en C la dernière instruction d'un bloc doit comprendre un ; (terminateur) alors qu'en Pascal, il est inutile, voire fautif, d'en mettre un (cela consiste à ajouter une instruction vide en fin de bloc). De même, le caractère ; peut-être utilisé en C comme instruction vide, ce qui n'aurait pas de sens en Pascal.

Les langages utilisant un terminateur sont réputés engendrer moins de fautes de syntaxe que ceux utilisant un séparateur.

Stratégie d'évaluation

Une stratégie d'évaluation est un ensemble de règles qui décrivent comment évaluer une expression dans un langage de programmation. En particulier, la stratégie d'évaluation définit à quel moment les arguments des fonctions et opérateurs sont évalués ou réduits.

On distingue essentiellement deux types de strat√©gies :

  • l'√©valuation stricte. Dans cette strat√©gie les arguments des fonctions sont toujours √©valu√©s avant que la fonction ne soit appliqu√©e.
  • l'√©valuation paresseuse, ou √©valuation retard√©e. Ici les arguments ne sont √©valu√©s que lorsque leur valeur est effectivement requise. Ce type d'√©valuation est g√©n√©ralement utilis√© dans les langages fonctionnels comme Haskell.

La plupart des langages ont un système d'évaluation stricte, et utilisent une forme d'évaluation paresseuse pour les expressions booléennes (évaluation court-circuit). Cependant, même si un langage a un système d'évaluation stricte, il est possible de simuler une évaluation paresseuse, ou d'utiliser des constructions spéciales. Par exemple Scheme fournit la fonction delay, qui retarde l'évaluation d'une expression, et force qui force l'évaluation.

Utilisations des langages de programmation

Dans cette section nous verrons que l'ont peut classer les langages de programmation, non pas en fonction des caractéristiques du langage formel utilisé, mais en fonction de leur utilisation. En effet, beaucoup de langages sont utilisés presque exclusivement dans un domaine particulier.

Langages de définition de données

Un langage de définition de données ne permet pas d'effectuer de traitement. Comme son nom l'indique, un langage de ce type permet de décrire des types abstraits de données (par exemple des listes, tuples, arbres …), et des instances de ces types de données. Par exemple, XML est un langage textuel permettant la représentation de données ayant une structure arborescente.

Langages de requête

Article d√©taill√© : Langage de requ√™te.

Les langages de requêtes sont destinés interroger et à manipuler les bases de données. Par exemple SQL (pour Structured Query Language) est un langage de requête utilisé par un grand nombre de systèmes de gestion de bases de données tels que Oracle ou SQL Server.

Langages pour pages Web dynamiques

Voir la cat√©gorie : Langage pour pages Web dynamiques.

Ce type de langages est utilisé pour dynamiser l'interaction entre un client et un serveur.

Du c√īt√© du serveur Web, cela permet de produire des pages au contenu dynamique, c'est √† dire g√©n√©r√© √† chaque affichage voire modifi√© √† la vol√©e. Ces langages sont par ailleurs souvent coupl√©s avec un langage pour communiquer avec des bases de donn√©es.

C√īt√© client (en g√©n√©ral le navigateur), les diff√©rents langages sont focalis√©s sur l'am√©lioration de l'interactivit√© de la page pour l'utilisateur. Par exemple, du code JavaScript peut √™tre int√©gr√© directement au sein d'une page Web pour en modifier dynamiquement le contenu du c√īt√© client.

Par ailleurs, certains langages permettent de développer à la fois les aspects client et serveur. C'est le cas d'Ocsigen et de Hop.

Langages de programmation théorique

Voir la cat√©gorie : Langage de programmation th√©orique.

On d√©signe parfois par langages de programmation th√©oriques les syst√®mes formels utilis√©s pour d√©crire de fa√ßon th√©orique le fonctionnement des ordinateurs. Ils ne servent donc pas √† proprement parler √† d√©velopper des applications pour ordinateurs, mais plut√īt √† repr√©senter des mod√®les, pour ensuite d√©montrer certaines de leurs propri√©t√©s.

Parmi les plus anciens de ces formalismes, on peut citer la machine de Turing et le őĽ-calcul de Church, qui datent tous les deux des ann√©es 1930, et sont donc ant√©rieurs √† l'invention de l'ordinateur. Le őĽ-calcul a par la suite servi de base th√©orique √† la famille des langages de programmation fonctionnelle.

Plus r√©cemment, dans les ann√©es 1980, Robin Milner a mis au point le ŌÄ-calcul pour mod√©liser les syst√®mes concurrents.

Pour rendre la programmation plus difficile

Article d√©taill√© : Langage de programmation exotique.

Langages spécialisés

  • ABEL, langage pour la programmation √©lectronique des PLD
  • CDuce, langage fonctionnel d'ordre sup√©rieur pour la manipulation de documents au format XML.
  • Forme de Backus-Naur (BNF), formalisation des langages de programmation
  • PROMELA, langage de sp√©cification de syst√®mes asynchrones
  • VRML, description de sc√®nes en trois dimensions

Langages synchrones

Langages de programmation synchrones pour les systèmes réactifs

Langages à vocation pédagogique

Langages pour l'électronique numérique

  • Verilog, autre langage de description mat√©rielle et de simulation, plus populaire aux √Čtats-Unis
  • VHDL, langage de description mat√©rielle, permettant de synth√©tiser de l'√©lectronique num√©rique (descriptions de portes logiques) et d'en simuler le fonctionnement
  • SystemC, langage de description mat√©rielle de plus haut niveau que les pr√©c√©dents et permettant une simulation plus rapide

Langages pour la statistique

  • R, langage pour l'outil de statistiques du m√™me nom
  • xLispStat, langage pour l'outil de statistiques du m√™me nom

Langages de programmation de Commande Numérique (C.N.)

Article d√©taill√© : Programmation de commande num√©rique.

Une machine-outil automatisée, ou Commande Numérique (C.N.), a besoin d'un langage de programmation pour réaliser les opérations de tournage, ou de fraisage…

Langages de programmation des automates programmables industriels (API)

Voir aussi

Articles connexes

Notes et références

  1. ‚ÜĎ Gilles Dowek, Le langage math√©matique et les langages de programmation, Colloque Voir, entendre, raisonner, calculer, Cit√© des sciences et de l'industrie, La Villette, Paris, 1997 ‚ÄĒ lire en ligne [pdf]
  2. ‚ÜĎ (en) INRIA, A History of Caml
  • Portail de la programmation informatique Portail de la programmation informatique

Ce document provient de ¬ę Langage de programmation ¬Ľ.

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Langage De Programmation de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • Langage de programmation ‚ÄĒ Programme √©crit en Perl. Programm ‚Ķ   Wikip√©dia en Fran√ßais

  • Langage de programmation C ‚ÄĒ C (langage) Pour les articles homonymes, voir C. C ‚Ķ   Wikip√©dia en Fran√ßais

  • Langage de programmation D ‚ÄĒ D (langage) Pour les articles homonymes, voir D. Il y a eu plusieurs langages de programmation appel√©s D durant l histoire de l‚Äôinformatique. un langage (d√©velopp√© dans cet article) a √©t√© cr√©√© par Walter Bright. un autre langage, appel√© Dialog… ‚Ķ   Wikip√©dia en Fran√ßais

  • langage de programmation ‚ÄĒ programavimo kalba statusas T sritis automatika atitikmenys: angl. programming language vok. Programmiersprache, f rus. —Ź–∑—č–ļ –Ņ—Ä–ĺ–≥—Ä–į–ľ–ľ–ł—Ä–ĺ–≤–į–Ĺ–ł—Ź, m pranc. langage de programmation, m ‚Ķ   Automatikos terminŇ≥ Ňĺodynas

  • langage de programmation ‚ÄĒ ‚óŹ loc. m. ‚ĖļLANG langage permettant d √©crire des programmes (par opposition aux autres, qui peuvent par exemple permettre de d√©crire la structure d un document) ‚Ķ   Dictionnaire d'informatique francophone

  • Langage De Programmation Exotique ‚ÄĒ Un langage de programmation exotique est un langage de programmation imagin√© comme un test des limites de la cr√©ation de langages de programmation, un exercice intellectuel ou encore une blague, sans aucune intention de cr√©er un langage… ‚Ķ   Wikip√©dia en Fran√ßais

  • Langage de programmation informatique ‚ÄĒ Programmation informatique Pour les articles homonymes, voir Programmation (homonymie). La programmation dans le domaine informatique est l ensemble des activit√©s qui permettent l √©criture des programmes informatiques. C est une √©tape importante… ‚Ķ   Wikip√©dia en Fran√ßais

  • Langage de programmation √©sot√©rique ‚ÄĒ Langage de programmation exotique Un langage de programmation exotique est un langage de programmation imagin√© comme un test des limites de la cr√©ation de langages de programmation, un exercice intellectuel ou encore une blague, sans aucune… ‚Ķ   Wikip√©dia en Fran√ßais

  • Langage de programmation de haut niveau ‚ÄĒ Langage de haut niveau En informatique, un langage de haut niveau (aussi appel√© langage de programmation de haut niveau) est un langage de programmation qui permet au programmeur de s abstraire de d√©tails inh√©rents au fonctionnement de l… ‚Ķ   Wikip√©dia en Fran√ßais

  • Langage de programmation Java ‚ÄĒ Java (langage) Pour les articles homonymes, voir Java.  Ne doit pas √™tre confondu avec JavaScript ‚Ķ   Wikip√©dia en Fran√ßais


Share the article and excerpts

Direct link
… Do a right-click on the link above
and select ‚ÄúCopy Link‚ÄĚ

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.