Estrategia de evaluación


En un lenguaje de programación , una estrategia de evaluación es un conjunto de reglas para evaluar expresiones. [1] El término se usa a menudo para referirse a la noción más específica de una estrategia de paso de parámetros [2] que define si evaluar los parámetros de una llamada de función y, de ser así, en qué orden (el orden de evaluación ) [3] y el tipo de valor que se pasa a la función para cada parámetro (la estrategia de vinculación ). [4] La noción de estrategia de reducción es distinta, [5]aunque algunos autores combinan los dos términos y la definición de cada término no es ampliamente aceptada. [6]

Para ilustrar, una aplicación de función puede evaluar el argumento antes de evaluar el cuerpo de la función y pasar la dirección, dando a la función la capacidad de buscar el valor actual del argumento y modificarlo mediante asignación . [7]

La estrategia de evaluación está especificada por la definición del lenguaje de programación y no es una función de ninguna implementación específica. La convención de llamada define los detalles de paso de parámetros específicos de la implementación.

Esta es una tabla de estrategias de evaluación y lenguajes representativos por año introducido. Los idiomas representativos se enumeran en orden cronológico, comenzando con el (los) idioma (s) que introdujeron la estrategia (si corresponde) y seguidos por los idiomas prominentes que utilizan la estrategia. [8] : 434 

Mientras que el orden de las operaciones define el árbol de sintaxis abstracta de la expresión, el orden de evaluación define el orden en el que se evalúan las expresiones. Por ejemplo, el programa Python

El orden de evaluación es principalmente visible en el código con efectos secundarios , pero también afecta el rendimiento del código porque un orden rígido inhibe la programación de instrucciones . Por esta razón, los estándares de lenguaje como C ++ tradicionalmente dejaron el orden sin definir, aunque lenguajes como Java y C # definen el orden de evaluación como de izquierda a derecha [8] : 240–241  y el estándar C ++ 17 ha agregado restricciones en el orden de evaluación. [15]