En los viejos tiempos, los procesadores no tenían instrucciones de pila, y los lenguajes de programación no admitían la recursividad. Con el tiempo, cada vez más idiomas optan por admitir la recursividad, y el hardware siguió a la suite con capacidades de asignación de marcos de pila. Este soporte ha variado mucho a lo largo de los años con diferentes procesadores. Algunos procesadores adoptaron marcos de pila y / o registros de puntero de pila; algunas adoptaron instrucciones que lograrían la asignación de marcos de pila en una sola instrucción.
A medida que los procesadores avanzan con un solo nivel y luego con cachés de varios niveles, una ventaja crítica de la pila es la de la localidad de caché. La parte superior de la pila casi siempre está en el caché. Siempre que pueda hacer algo que tenga una gran tasa de aciertos de caché, está en el camino correcto con los procesadores modernos. La memoria caché aplicada a la pila significa que las variables locales, parámetros, etc. casi siempre están en la memoria caché y disfrutan del más alto nivel de rendimiento.
En resumen, el uso de la pila evolucionó tanto en hardware como en software. Existen otros modelos (por ejemplo, la informática de flujo de datos se intentó durante un período prolongado), sin embargo, la localidad de la pila hace que funcione realmente bien. Además, el código de procedimiento es justo lo que los procesadores quieren para el rendimiento: una instrucción que le dice qué hacer después de otra. Cuando las instrucciones están fuera de orden lineal, el procesador se ralentiza enormemente, al menos por el momento, ya que no hemos descubierto cómo hacer que el acceso aleatorio sea tan rápido como el acceso secuencial. (Por cierto, hay problemas similares en cada nivel de memoria, desde caché, memoria principal, disco ...)
Entre el rendimiento demostrado de las instrucciones de acceso secuencial y el comportamiento de almacenamiento en caché beneficioso de la pila de llamadas, tenemos, al menos en la actualidad, un modelo de rendimiento ganador.
(Podríamos incluir mutabilidad de las estructuras de datos en las obras también ...)
Esto no significa que otros modelos de programación no puedan funcionar, especialmente cuando se pueden traducir a las instrucciones secuenciales y al modelo de pila de llamadas del hardware actual. Pero existe una clara ventaja para los modelos que admiten dónde está el hardware. Sin embargo, las cosas no siempre permanecen igual, por lo que podríamos ver cambios en el futuro a medida que diferentes tecnologías de memoria y transistores permitan un mayor paralelismo. Siempre es una broma entre lenguajes de programación y capacidades de hardware, ¡así que ya veremos!