En estilo funcional, el flujo de valores a través de un programa es muy, muy visible (tanto para el compilador como para el programador). Esto le da al compilador mucha libertad de acción para decidir dónde almacenar los valores, cuánto tiempo mantenerlos, etc.
En un lenguaje imperativo, el compilador promete al programador un modelo en el que la mayoría de las variables corresponden a ubicaciones reales en la memoria que permanecen durante una vida útil definida. Potencialmente, cualquier declaración puede leer (o escribir en) cualquiera de estas ubicaciones, por lo que el compilador solo puede reemplazar ubicaciones de memoria con asignación de registros, fusionar dos variables en una única ubicación de almacenamiento o realizar optimizaciones similares después de realizar un minucioso análisis de dónde más en el programa se puede hacer referencia a esa variable.
Ahora, hay dos advertencias:
- La comunidad del lenguaje de programación ha dedicado (¿desperdiciado?) Un gran esfuerzo durante los últimos cincuenta años para desarrollar formas inteligentes de hacer este análisis. Hay trucos bien conocidos como el registro de colores y demás para hacer algunos de los casos más fáciles de hacer la mayor parte del tiempo; pero esto genera compiladores grandes y lentos, y una compensación constante de la complejidad de la compilación por la calidad del código resultante
- Al mismo tiempo, la mayoría de los lenguajes de programación funcionales tampoco son puramente funcionales; muchos de los programas de realidad lo que tiene que hacer, al igual que responden a E / S son inherentemente no funcional, por lo que no compilador puede estar completamente libre de estos trucos, y hay un lenguaje que evita por completo - incluso Haskell, que es un poco demasiado puro para mi gusto (Your Mileage May Vary) solo puede controlar y eliminar las partes no funcionales de su código, no evitarlas por completo.
Pero para responder a la pregunta general, sí, un paradigma funcional le da al compilador mucha libertad para optimizar que no tiene en un entorno imperativo.