Articulo de referencia

Lenguaje de programación estricto

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...

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

Casi todos los lenguajes de programación de uso común hoy en día son estrictos. Algunos ejemplos son C# , Java , Perl (todas las versiones, es decir, hasta las versiones 5 y 7), Python , [ 2 ] Ruby , Common Lisp y ML . Algunos lenguajes de programación estrictos incluyen características que imitan la evaluación perezosa. Raku (anteriormente llamado 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 .

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

Extensión

En la mayoría de los lenguajes no estrictos, esta flexibilidad se extiende a los constructores de datos . Esto permite manipular estructuras de datos conceptualmente infinitas (como la lista de todos los números primos ) del mismo modo 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 . Por ejemplo, el lenguaje Haskell ha incorporado docenas de extensiones, divididas en niveles según su fiabilidad y complejidad. [ 7 ]

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 fuentes perezosas - Wikibooks, 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 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.
  7. "Una taxonomía de extensiones del lenguaje Haskell" . Gist . 5 de febrero de 2019. Consultado el 5 de julio de 2026 .

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 , Lecture Notes in Computer Science, vol.  1369, Berlín; Heidelberg: Springer, ISBN 9783540648239ISSN 0302-9743 , OCLC 873553545 , consultado el 21 de noviembre de 2014