Un lenguaje de programación estricto es aquel que solo permite que el usuario defina funciones estrictas (funciones cuyos parámetros deben evaluarse completamente antes de poder ser llamadas). Un lenguaje de programación no estricto permite al usuario definir funciones no estrictas y, por lo tanto, puede permitir la evaluación perezosa . En la mayoría de los lenguajes no estrictos, esta flexibilidad se extiende a los constructores de datos .
Descripción
Un lenguaje de programación estricto es aquel que emplea un paradigma de programación estricto , permitiendo únicamente que el usuario defina funciones estrictas (funciones cuyos parámetros deben evaluarse completamente antes de poder ser llamadas). Un lenguaje de programación no estricto permite al usuario definir funciones no estrictas y, por lo tanto, puede permitir la evaluación perezosa . [ 1 ]
La falta de rigor tiene varias desventajas que han impedido su adopción generalizada:
- Debido a la incertidumbre sobre si las expresiones serán evaluadas y cuándo lo serán, los lenguajes no estrictos generalmente deben ser puramente funcionales para ser útiles.
- Todas las arquitecturas de hardware de uso común están optimizadas para lenguajes estrictos, por lo que los mejores compiladores para lenguajes no estrictos producen código más lento que los mejores compiladores para lenguajes estrictos.
- La complejidad espacial de los programas no estrictos es difícil de comprender y predecir.
- En muchos lenguajes estrictos, algunas ventajas de las funciones no estrictas pueden obtenerse mediante el uso de macros o thunks .
Los lenguajes de programación estrictos suelen asociarse con la evaluación estricta , y los lenguajes no estrictos con la evaluación perezosa , pero en ambos casos son posibles otras estrategias de evaluación . Los términos "lenguaje de programación estricto" y "lenguaje de programación perezoso" se utilizan a menudo como sinónimos de "lenguaje de programación estricto" y "lenguaje de programación no estricto", respectivamente.
Ejemplos
Nearly all programming languages in common use today are strict. Examples include C#, Java, Perl (all versions, i.e., through versions 5 and 7), Python,[2]Ruby, Common Lisp, and ML. Some strict programming languages include features that mimic laziness.Raku (formerly named Perl 6) has lazy lists,[3]Python has generating functions,[4] and Julia provides a macro system to build non-strict functions,[5] as does Scheme.
Examples for non-strict languages are Haskell, R, Miranda, and Clean.[6]
Extension
In most non-strict languages, the non-strictness extends to data constructors. This allows conceptually infinite data structures (such as the list of all prime numbers) to be manipulated in the same way as ordinary finite data structures. It also allows for the use of very large but finite data structures such as the complete game tree of chess. As an example, the Haskell language has added dozens of language extensions, divided into levels based upon their reliability and complexity.[7]
Citations
- ↑Scott 2006, p. 541.
- ↑Lott, Steven (2015). Functional Python Programming. Birmingham, UK: Packt Publishing. p. 35. ISBN 978-1-78439-699-2.
Python focuses on strict evaluation
- ↑"Raku Programming/Lazy Lists and Feeds - Wikibooks, open books for an open world". en.wikibooks.org. Retrieved 2021-02-09.
- ↑Lott, Steven (2015). Functional Python Programming. Birmingham, UK: Packt Publishing. p. 35. ISBN 978-1-78439-699-2.
a generator function is non-strict. [...] we can leverage generator functions to create lazy evaluation.
- ↑Innes, Mike J. (2021-02-06), MikeInnes/Lazy.jl, retrieved 2021-02-09
- ↑Cluet & Hull 1998, pp. 25–26.
- ↑"A Taxonomy of Haskell Language Extensions". Gist. February 5, 2019. Retrieved 2026-07-05.
References
- Scott, Michael Lee (2006) [1999], McFadden, Nate; et al. (eds.), Programming Language Pragmatics , vol. 2, Publicado por Denise Penrose (2.ª ed .), San Francisco: Morgan Kaufmann, ISBN 9780126339512, OCLC 551774322 , consultado el 21 de noviembre de 2014
- Cluet, Sophie; Hull, Rick; et al., eds. (1998) [1997], Lenguajes de programación de bases de datos , Lecture Notes in Computer Science, vol. 1369, Berlín; Heidelberg: Springer, ISBN 9783540648239ISSN 0302-9743 , OCLC 873553545 , consultado el 21 de noviembre de 2014
- paradigmas de programación
- Estrategia de evaluación