Un langage de programmation strict est un langage de programmation qui permet uniquement à l'utilisateur de définir des fonctions strictes (fonctions dont les paramètres doivent être évalués complètement avant de pouvoir être appelés). Un langage de programmation non strict permet à l'utilisateur de définir des fonctions non strictes et peut donc autoriser une évaluation paresseuse . Dans la plupart des langages non stricts, la non-strictité s'étend aux constructeurs de données .
Description
Un langage de programmation strict est un langage de programmation qui utilise un paradigme de programmation strict , permettant uniquement à l'utilisateur de définir des fonctions strictes (fonctions dont les paramètres doivent être évalués complètement avant de pouvoir être appelés). Un langage de programmation non strict permet à l'utilisateur de définir des fonctions non strictes et peut donc autoriser une évaluation paresseuse .
La non-striction présente plusieurs inconvénients qui ont empêché une adoption généralisée :
- En raison de l’incertitude concernant si et quand 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, de sorte que les meilleurs compilateurs pour les langages non stricts produisent du code plus lent que les meilleurs compilateurs pour les langages stricts.
- La complexité spatiale des programmes non stricts est difficile à comprendre et à prévoir.
- 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 à une évaluation avide et les langages non stricts à une évaluation paresseuse , mais d'autres stratégies d'évaluation sont possibles dans chaque cas. Les termes « langage de programmation avide » et « langage de programmation paresseux » sont souvent utilisés comme synonymes de « langage de programmation strict » et de « langage de programmation non strict » respectivement.
Exemples
Presque tous les langages de programmation couramment utilisés aujourd'hui sont stricts. Les exemples incluent C# , Java , Perl (toutes les versions, c'est-à-dire jusqu'à la version 5 et la version 7), Python , Ruby , Common Lisp et ML . Certains langages de programmation stricts incluent des fonctionnalités qui imitent la paresse. Raku (anciennement connu sous le nom de Perl 6) a des listes paresseuses, Python a des fonctions de générateur, et Julia fournit un système de macros pour créer des fonctions non strictes, tout comme Scheme .
Des exemples de langages non stricts sont Haskell , R , Miranda et Clean .
Extension
Dans la plupart des langages non stricts, la non-strictité 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 les structures de données finies ordinaires. Cela permet également d'utiliser des structures de données très grandes mais finies telles que l' arbre de jeu complet des échecs .
Citations
- Scott, Michael Lee (2006) [1999], McFadden, Nate; et al. (éd.), Programming Language Pragmatics, vol. 2, publié par Denise Penrose (2e éd .), San Francisco : Morgan Kaufmann, ISBN 9780126339512, OCLC 551774322 2014
- Cluet, Sophie; Hull, Rick; et al., éd. (1998) [1997], Langages de programmation de bases de données, Notes de cours en informatique, vol. 1369, Berlin; Heidelberg: Springer, ISBN 9783540648239, ISSN 0302-9743, OCLC 873553545 2014