Articulo de referencia

Lenguaje de programación estricto

Un lenguaje de programación estricto es un lenguaje de programación que solo permite que el usuario defina funciones estrictas (funciones cuyos parámetros deben evaluarse por co...

Un lenguaje de programación estricto es un lenguaje de programación que solo permite que el usuario defina funciones estrictas (funciones cuyos parámetros deben evaluarse por completo antes de poder llamarlas). Un lenguaje de programación no estricto permite que el usuario defina funciones no estrictas y, por lo tanto, puede permitir la evaluación diferida . En la mayoría de los lenguajes no estrictos, la no rigurosidad se extiende a los constructores de datos .

Descripción

Un lenguaje de programación estricto es un lenguaje de programación que emplea un paradigma de programación estricto , permitiendo que el usuario defina únicamente 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 diferida . [1]

La falta de rigurosidad tiene varias desventajas que han impedido su adopción generalizada: [ cita requerida ]

  • Debido a la incertidumbre respecto de 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.
  • En muchos lenguajes estrictos, se pueden obtener algunas ventajas de las funciones no estrictas mediante el uso de macros o thunks .

Los lenguajes de programación estrictos suelen asociarse con la evaluación ansiosa , y los lenguajes no estrictos con la evaluación perezosa , pero otras estrategias de evaluación son posibles en cada caso. [ cita requerida ] Los términos "lenguaje de programación ansiosa" y "lenguaje de programación perezosa" se utilizan a menudo como sinónimos de "lenguaje de programación estricto" y "lenguaje de programación no estricto" respectivamente. [ cita requerida ]

Ejemplos

Casi todos los lenguajes de programación de uso común hoy en día son estrictos. [ cita requerida ] Los ejemplos incluyen C# , Java , Perl (todas las versiones, es decir, hasta la versión 5 y la versión 7), Python , [2] Ruby , Common Lisp y ML . Algunos lenguajes de programación estrictos incluyen características que imitan la pereza. [ aclaración necesaria ] Raku (anteriormente conocido como Perl 6) tiene listas perezosas, [3] Python tiene funciones generadoras, [4] y Julia proporciona un sistema de macros para construir funciones no estrictas, [5] al igual que Scheme .

Algunos ejemplos de lenguajes no estrictos son Haskell , R , Miranda y Clean . [6]

Extensión

En la mayoría de los lenguajes no estrictos, la no estrictez se extiende a los constructores de datos . Esto permite que las estructuras de datos conceptualmente infinitas (como la lista de todos los números primos ) se manipulen de la misma manera 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 .

Citas

  1. ^ Scott 2006, pág. 541.
  2. ^ Lott, Steven (2015). Programación funcional en Python . Birmingham, Reino Unido: Packt Publishing. pág. 35. ISBN 978-1-78439-699-2Python se centra en la evaluación estricta
  3. ^ "Programación Raku/Listas y feeds perezosos - Wikilibros, libros abiertos para un mundo abierto". en.wikibooks.org . Consultado el 9 de febrero de 2021 .
  4. ^ Lott, Steven (2015). Programación funcional en Python . Birmingham, Reino Unido: Packt Publishing. pág. 35. ISBN 978-1-78439-699-2. una función generadora no es estricta. [...] podemos aprovechar las funciones generadoras para crear una evaluación perezosa.
  5. ^ Innes, Mike J. (6 de febrero de 2021), MikeInnes/Lazy.jl , consultado el 9 de febrero de 2021
  6. ^ Cluet y Hull 1998, págs. 25-26.

Referencias

  • 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, Notas de clase en informática, vol. 1369, Berlín; Heidelberg: Springer, ISBN 9783540648239, ISSN  0302-9743, OCLC  873553545 , consultado el 21 de noviembre de 2014
Obtenido de "https://es.wikipedia.org/w/index.php?title=Lenguaje_de_programación_estricto&oldid=1232176631"