Un lenguaje de programación estricto es un lenguaje de programación que emplea un paradigma de programación estricto , lo que permite que el usuario solo defina funciones estrictas (funciones cuyos parámetros deben evaluarse completamente antes de poder llamarlas). Un lenguaje de programación no estricto permite al usuario definir funciones no estrictas y, por lo tanto, puede permitir una evaluación perezosa . [1]
Ejemplos de
Casi todos los lenguajes de programación de uso común en la actualidad son estrictos. Los ejemplos incluyen C # , Java , Perl (todas las versiones, es decir, hasta la versión 5 y la versión 7; Raku, anteriormente conocido como Perl 6, tiene listas diferidas [2] ), Python , Ruby , Common Lisp y ML . Ejemplos de lenguajes no estrictos son Haskell , Miranda y Clean . [3] Los lenguajes cuyas funciones ordinarias son estrictas pero que proporcionan un sistema macro para construir funciones no estrictas incluyen Julia , [4] y Scheme . Las listas diferidas también se pueden hacer en C , [5] y C ++ .
Explicación
En la mayoría de los lenguajes no estrictos, el no estricto se extiende a los constructores de datos . Esto permite manipular estructuras de datos conceptualmente infinitas (como la lista de todos los números primos ) de la misma forma que las estructuras de datos finitas ordinarias. También permite el uso de estructuras de datos muy grandes pero finitas, como el árbol de juego completo del ajedrez .
El no rigor tiene varias desventajas que han impedido una adopción generalizada:
- Debido a la incertidumbre con respecto a si se evaluarán las expresiones y cuándo, 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.
Los lenguajes de programación estrictos a menudo se asocian con una evaluación entusiasta y los lenguajes no estrictos con una evaluación perezosa , pero en cada caso son posibles otras estrategias de evaluación . Los términos "lenguaje de programación ávido" 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.
En muchos lenguajes estrictos, se pueden obtener algunas ventajas de las funciones no estrictas mediante el uso de macros o thunks .
Citas
- ^ Scott , 2006 , p. 541.
- ^ "Programación Raku / Lazy Lists and Feeds - Wikilibros, libros abiertos para un mundo abierto" . en.wikibooks.org . Consultado el 9 de febrero de 2021 .
- ^ Cluet y Hull 1998 , págs. 25-26.
- ^ Innes, Mike J. (2021-02-06), MikeInnes / Lazy.jl , consultado el 2021-02-09
- ^ "Lista perezosa en C" . Estándares . 2011-11-15 . Consultado el 9 de febrero de 2021 .
Referencias
- Scott, Michael Lee (2006) [1999], McFadden, Nate; et al. (eds.), Programming Language Pragmatics , Volume 2, Publicado por Denise Penrose (2 nd ed.), San Francisco: Morgan Kaufmann, ISBN 9780126339512, OCLC 551774322 , consultado el 21 de noviembre de 2014
|volume=
tiene texto extra ( ayuda ) - Cluet, Sophie; Hull, Rick; et al., eds. (1998) [1997], Lenguajes de programación de bases de datos , Lecture Notes in Computer Science, Volumen 1369, Berlín; Heidelberg: Springer, ISBN 9783540648239, ISSN 0302-9743 , OCLC 873553545 , consultado el 21 de noviembre de 2014
|volume=
tiene texto extra ( ayuda )