Articulo de referencia

Análisis de estrictez

En informática , el análisis de estrictez se refiere a cualquier algoritmo utilizado para demostrar que una función en un lenguaje de programación funcional no estricto es estri...

En informática , el análisis de estrictez se refiere a cualquier algoritmo utilizado para demostrar que una función en un lenguaje de programación funcional no estricto es estricta en uno o más de sus argumentos. Esta información es útil para los compiladores, ya que las funciones estrictas se pueden compilar de forma más eficiente. Por lo tanto, si se demuestra que una función es estricta (mediante el análisis de estrictez) en tiempo de compilación, se puede compilar para usar una convención de llamada más eficiente sin modificar el significado del programa que la contiene.

fTenga en cuenta que se dice que una función diverge si devuelve{}{\displaystyle \{\bot \}}Operacionalmente, esto significaría que fprovoca una terminación anormal del programa contenedor (por ejemplo, un fallo con un mensaje de error) o que entra en un bucle infinito. La noción de "divergencia" es importante porque una función estricta es aquella que siempre diverge cuando se le da un argumento que diverge, mientras que una función perezosa (o no estricta) es aquella que puede o no divergir cuando se le da dicho argumento. El análisis de estrictez intenta determinar las "propiedades de divergencia" de las funciones, lo que permite identificar algunas funciones que son estrictas.

Enfoques para el análisis de la rigurosidad

Interpretación del resumen prospectivo

El análisis de estrictez puede caracterizarse como una interpretación abstracta directa que aproxima cada función del programa mediante una función que mapea las propiedades de divergencia de los argumentos a las propiedades de divergencia de los resultados. En el enfoque clásico iniciado por Alan Mycroft , la interpretación abstracta utilizaba un dominio de dos puntos donde 0 denotaba el conjunto{}{\displaystyle \{\bot \}}considerado como un subconjunto del argumento o tipo de retorno, y 1 denota todos los valores en el tipo. [ 1 ]

Análisis de la demanda

El compilador Glasgow Haskell (GHC) utiliza una interpretación abstracta inversa conocida como análisis de demanda para realizar análisis de estrictez, así como otros análisis de programas. En el análisis de demanda, cada función se modela mediante una función que relaciona las demandas de valor sobre el resultado con las demandas de valor sobre los argumentos. Una función es estricta en un argumento si una demanda sobre su resultado conlleva una demanda sobre ese argumento. [ 2 ]

Análisis de rigor basado en proyecciones

El análisis de estrictez basado en proyecciones, introducido por Philip Wadler y RJM Hughes , utiliza proyecciones de estrictez para modelar formas más sutiles de estrictez, como la estrictez de cabeza en un argumento de lista. (Por el contrario, el análisis de demanda de GHC solo puede modelar la estrictez dentro de los tipos de producto , es decir, tipos de datos que solo tienen un único constructor ). Una funciónF{\displaystyle f}se considera estricto en la cabeza siF=Fπ{\displaystyle f=f\circ \pi }, dóndeπ{\displaystyle \pi }es la proyección que evalúa en primer plano su argumento de lista. [ 3 ]

En la década de 1980, existió un amplio corpus de investigación sobre el análisis de la rigurosidad.

Referencias

  1. Mycroft, Alan (1980). "La teoría y la práctica de transformar la llamada por necesidad en llamada por valor". Lecture Notes in Computer Science: Proc. 4th Intl. Symp. on Programming, Vol. 83 . Springer-Verlag.
  2. "El comentario de GHC: Analizador de la demanda en GHC" . Consultado el 12 de febrero de 2014 .
  3. Wadler, P.; RJM Hughes (1987). "Proyecciones para el análisis de estrictez". Programación funcional y arquitectura de computadoras; LNCS 274. Springer-Verlag.