← Tutti gli episodi
Copertina di La pila: come la macchina ricorda dove tornare
Stagione 64 · Episodio 006

La pila: come la macchina ricorda dove tornare

19 settembre 2026 5:03
0:00 5:03

Ciao, e benvenuto nella sesta puntata della sessantaquattresima stagione. Nella puntata scorsa ho lasciato una promessa in sospeso. Abbiamo detto che le funzioni, quaggiù, non esistono: c'è solo il salto. Ma allora sorge un problema delizioso. Quando una funzione finisce il suo lavoro, deve tornare esattamente al punto da cui era stata chiamata. Come fa la macchina a ricordarsi dove tornare? Oggi rispondo, e la risposta è una delle idee più eleganti dell'informatica. Oggi parliamo della pila.

Partiamo dal problema, perché è più insidioso di quanto sembri. Immagina una funzione che calcola qualcosa di utile, e che viene chiamata da tanti punti diversi del programma. Ogni volta, quando ha finito, deve saltare indietro al punto giusto, che è diverso a seconda di chi l'ha chiamata. Una volta deve tornare alla riga cento, un'altra alla riga cinquecento. Il semplice salto non basta, perché il salto va sempre a una riga fissa. Serve un modo per ricordare, di volta in volta, l'indirizzo a cui tornare. E il problema si complica se una funzione ne chiama un'altra, che ne chiama un'altra ancora: ora bisogna ricordare una catena di ritorni.

Vediamo la soluzione, e la sua eleganza. La soluzione è una struttura chiamata pila. Immaginala proprio come una pila di piatti, o di fogli, uno sopra l'altro. Ha due sole regole, semplicissime. Puoi solo aggiungere un elemento in cima. E puoi solo togliere l'elemento in cima. L'ultimo che metti è il primo che togli, sempre. Quando una funzione viene chiamata, la macchina appoggia sulla pila un foglietto con scritto l'indirizzo a cui dovrà tornare. Quando la funzione finisce, la macchina prende il foglietto in cima, legge l'indirizzo, e salta lì. Semplice, e perfetto.

Voglio farti vedere perché questo gestisce le catene, perché è geniale. Guarda cosa succede quando le funzioni si chiamano a catena. La prima funzione viene chiamata: appoggio sulla pila il suo foglietto di ritorno. Questa chiama una seconda funzione: appoggio sopra il secondo foglietto. La seconda ne chiama una terza: appoggio sopra il terzo. Ora la terza finisce: prendo il foglietto in cima, il terzo, e torno indietro giusto. Poi finisce la seconda: prendo quello che ora è in cima, il secondo, e torno. Poi la prima: prendo l'ultimo rimasto. La regola ultimo messo, primo tolto fa sì che i ritorni si srotolino sempre nell'ordine esatto, a ritroso, come si erano accumulati. Non serve altro.

Voglio dirti che la pila non serve solo per i ritorni, perché fa di più. Sulla pila non finiscono solo gli indirizzi di ritorno. Ci finiscono anche le informazioni temporanee di ogni funzione: i suoi dati locali, quei valori che le servono solo mentre lavora e che sparisce quando ha finito. Ogni chiamata a funzione si porta dietro il suo pacchetto di roba sulla pila, che nasce quando la funzione parte e viene buttato via quando finisce. È per questo che, quando in un linguaggio ad alto livello dichiari una variabile dentro una funzione, quella variabile vive solo lì dentro: sta su un pezzetto di pila che verrà spazzato via all'uscita.

Voglio darti l'immagine che rende chiara questa idea, e insieme il suo pericolo. La pila è come una lancia da infilzare le comande, di quelle che si usano nelle cucine dei ristoranti: infili l'ultima comanda in cima, e stacchi sempre quella in cima. Ordinata, veloce, infallibile. Ma ha un limite fisico: se le funzioni continuano a chiamarne altre senza mai finire, per esempio una funzione che richiama se stessa all'infinito, la pila cresce, e cresce, e cresce, finché lo spazio riservato si esaurisce e trabocca. È il famoso trabocco della pila, uno degli errori più classici: la lancia delle comande talmente carica da rovesciarsi. Un pericolo che nasce proprio dalla natura accumulante di questa struttura.

Voglio darti la lezione generale, perché è bellissima nella sua semplicità. La lezione è che una regola elementare, ultimo messo primo tolto, risolve un problema che sembrava complicatissimo: tenere il filo di una catena di compiti annidati uno dentro l'altro. Non serviva un meccanismo astruso, serviva la struttura giusta. È un promemoria potente: spesso i problemi difficili non richiedono soluzioni complicate, ma la scelta di una struttura semplice e adatta, che poi fa il lavoro quasi da sola. Trovare quella struttura è metà dell'arte.

Per oggi ci fermiamo qui. Abbiamo risolto il mistero di come la macchina ricorda dove tornare. Il salto va a una riga fissa, ma una funzione deve tornare a chi l'ha chiamata, che ogni volta è diverso. La soluzione è la pila: metti in cima, togli dalla cima, ultimo messo primo tolto. A ogni chiamata appoggi un foglietto con l'indirizzo di ritorno; alla fine, prendi quello in cima e torni. Con le catene di chiamate, i ritorni si srotolano a ritroso, nell'ordine esatto. Sulla pila stanno anche i dati locali di ogni funzione, che nascono e muoiono con essa. Ma se cresce troppo, trabocca. La lezione: una regola semplice e la struttura giusta risolvono problemi che sembravano complicati. Nella prossima puntata: dal codice umano ai numeri, il traduttore. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.