Ai vecchi tempi, i processori non avevano istruzioni di stack e i linguaggi di programmazione non supportavano la ricorsione. Nel tempo, sempre più lingue scelgono di supportare la ricorsione e l'hardware ha seguito la suite con capacità di allocazione dei frame dello stack. Questo supporto è variato notevolmente nel corso degli anni con processori diversi. Alcuni processori hanno adottato i registri dello stack frame e / o del puntatore dello stack; alcune hanno adottato istruzioni che porterebbero a termine l'assegnazione dei frame dello stack in un'unica istruzione.
Man mano che i processori avanzavano con cache a livello singolo, quindi multilivello, un vantaggio fondamentale dello stack è quello della localizzazione della cache. La parte superiore dello stack è quasi sempre nella cache. Ogni volta che puoi fare qualcosa che ha un alto tasso di hit della cache, sei sulla strada giusta con i processori moderni. La cache applicata allo stack significa che le variabili locali, i parametri, ecc. Sono quasi sempre nella cache e godono del massimo livello di prestazioni.
In breve, l'utilizzo dello stack si è evoluto sia in hardware che in software. Esistono altri modelli (ad esempio il calcolo del flusso di dati è stato provato per un lungo periodo), tuttavia, la località dello stack lo fa funzionare davvero bene. Inoltre, il codice procedurale è proprio ciò che i processori vogliono, per prestazioni: un'istruzione che dice cosa fare dopo l'altra. Quando le istruzioni non sono in ordine lineare, il processore rallenta enormemente, almeno per il momento, dal momento che non abbiamo capito come rendere l'accesso casuale veloce come l'accesso sequenziale. (A proposito, ci sono problemi simili a ogni livello di memoria, dalla cache, alla memoria principale, al disco ...)
Tra le prestazioni dimostrate delle istruzioni di accesso sequenziale e il comportamento di memorizzazione nella cache utile dello stack di chiamate, abbiamo, almeno al momento, un modello di prestazioni vincente.
(Potremmo lanciare anche la mutabilità delle strutture dati nelle opere ...)
Ciò non significa che altri modelli di programmazione non possano funzionare, specialmente quando possono essere tradotti in istruzioni sequenziali e chiamare il modello stack dell'hardware di oggi. Ma c'è un netto vantaggio per i modelli che supportano l'hardware. Tuttavia, le cose non rimangono sempre le stesse, quindi potremmo vedere cambiamenti in futuro poiché diverse tecnologie di memoria e transistor consentono un maggiore parallelismo. È sempre un gioco di parole tra i linguaggi di programmazione e le capacità hardware, quindi vedremo!