Article de reference

Langage de programmation strict

( Apprenez comment et quand supprimer ce message ) Un langage de programmation strict est un langage qui n'autorise que la définition de fonctions strictes (fonctions dont les p...

( Apprenez comment et quand supprimer ce message )

Un langage de programmation strict est un langage qui n'autorise que la définition de fonctions strictes (fonctions dont les paramètres doivent être entièrement évalués avant d'être appelées). Un langage de programmation non strict permet à l'utilisateur de définir des fonctions non strictes et peut donc autoriser l'évaluation paresseuse . Dans la plupart des langages non stricts, cette tolérance s'étend aux constructeurs de données .

Description

Un langage de programmation strict est un langage de programmation qui emploie un paradigme de programmation strict , n'autorisant que la définition de fonctions strictes (fonctions dont les paramètres doivent être entièrement évalués avant d'être appelées). Un langage de programmation non strict permet à l'utilisateur de définir des fonctions non strictes et peut donc autoriser l'évaluation paresseuse .

Le manque de rigueur présente plusieurs inconvénients qui ont empêché son adoption généralisée :

  • En raison de l'incertitude quant à la possibilité et au moment où les expressions seront évaluées, les langages non stricts doivent généralement être purement fonctionnels pour être utiles.
  • Toutes les architectures matérielles couramment utilisées sont optimisées pour les langages stricts ; par conséquent, les meilleurs compilateurs pour les langages non stricts produisent un code plus lent que les meilleurs compilateurs pour les langages stricts.
  • La complexité spatiale des programmes non stricts est difficile à comprendre et à prédire.
  • Dans de nombreux langages stricts, certains avantages des fonctions non strictes peuvent être obtenus grâce à l'utilisation de macros ou de thunks .

Les langages de programmation stricts sont souvent associés à l'évaluation immédiate , et les langages non stricts à l'évaluation différée , mais d'autres stratégies d'évaluation sont possibles dans les deux cas. Les termes « langage de programmation immédiat » et « langage de programmation différé » sont souvent utilisés comme synonymes de « langage de programmation strict » et « langage de programmation non strict », respectivement.

Exemples

Presque tous les langages de programmation couramment utilisés aujourd'hui sont stricts. Citons par exemple C# Java , Perl ( toutes versions, c'est-à-dire jusqu'aux versions 5 et 7), , Ruby Common Lisp et ML . Certains langages stricts intègrent des fonctionnalités qui simulent l'évaluation paresseuse. Raku (anciennement Perl 6) propose des listes paresseuses, génératrices et , ainsi que , un système de macros permettant fonctions non

Des exemples de langages non stricts sont Haskell , R , Miranda et Clean .

Extension

Dans la plupart des langages non stricts, cette non-striction s'étend aux constructeurs de données . Cela permet de manipuler des structures de données conceptuellement infinies (comme la liste de tous les nombres premiers ) de la même manière que des structures de données finies ordinaires. Cela permet également l'utilisation de structures de données très volumineuses mais finies, telles que l' arbre de jeu complet des échecs . À titre d'exemple, le langage Haskell a intégré des dizaines d'extensions, classées par niveaux selon leur fiabilité et leur complexité.

Citations

  • Scott, Michael Lee (2006) [1999], McFadden, Nate et al. (éd.), Pragmatique des langages de programmation , vol. 2, publié par Denise Penrose (2e éd .), San Francisco : Morgan Kaufmann, ISBN9780126339512, OCLC 551774322
  • Cluet, Sophie ; Hull, Rick ; et al., éd. (1998) [1997], Langages de programmation de bases de données , Lecture Notes in Computer Science, vol. 1369, Berlin ; Heidelberg : Springer, ISBN9783540648239, ISSN 0302-9743 , OCLC 873553545
paradigmes de programmation