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

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”