En programación de computadoras , la evaluación ansiosa , también conocida como evaluación estricta o evaluación codiciosa , es la estrategia de evaluación utilizada por la mayoría de los lenguajes de programación tradicionales . En una evaluación entusiasta, una expresión se evalúa tan pronto como se vincula a una variable . Una alternativa opuesta a la evaluación ansiosa es la evaluación perezosa , donde las expresiones se evalúan solo cuando se evalúa una expresión dependiente según una estrategia de evaluación definida .
Los efectos de una evaluación entusiasta incluyen:
- Código que es fácilmente comprensible en términos de orden de ejecución que no cambia potencialmente su comportamiento en función de un cambio de contexto de ejecución.
- Un proceso de depuración más fácil en comparación con otras estrategias de evaluación debido a lo anterior.
- Sin embargo, la responsabilidad del rendimiento del código se transfiere al programador, lo que requiere un cuidadoso proceso de optimización del código .
Los lenguajes de programación imperativos , donde el orden de ejecución está implícitamente definido por la estructura del código fuente, casi siempre usan una evaluación ansiosa para evitar comportamientos inesperados que pueden ocurrir en ciertos contextos debido a la ejecución fuera de orden (por ejemplo, cuando se usa software multiproceso , ejecución concurrente de código , etc.). Este comportamiento inesperado puede resultar en carreras de datos , violaciones de atomicidad y otros errores y efectos potencialmente no deseados y difíciles de controlar.
Muchos compiladores modernos son capaces de reordenar la ejecución para optimizar mejor los recursos del procesador y, a menudo, pueden eliminar por completo la ejecución de expresiones innecesarias, si se puede determinar que los resultados de las expresiones no son visibles para el resto del programa . Sin embargo, esto no debe desviar el flujo de un programa compilado de la estrategia de evaluación definida por el lenguaje de programación en el que está escrito el código compilado, con la notable excepción de posibles errores introducidos por el compilador. Para evitar este problema, la mayoría (si no todos) los lenguajes modernos de alto nivel proporcionan construcciones que permiten al programador dirigir al compilador con respecto a sus propias optimizaciones. Como ejemplo, el uso del bloqueo de construcción a nivel de bloque en C # permite al programador definir un bloque de código que se ejecutará en el mismo orden en que se definió en el código fuente, lo que impide que el compilador realice operaciones de reorden. en ese bloque de código. [ cita requerida ]
Codificación de la iglesia
Bajo la codificación Church , la evaluación entusiasta de los operadores se correlaciona con la evaluación estricta de las funciones [ se necesita más explicación ] ; por esta razón, la evaluación estricta a veces se llama "ansiosa".