Nei linguaggi di programmazione, le chiusure sono una caratteristica popolare e spesso desiderata. Wikipedia dice (enfasi sulla mia):
In informatica, una chiusura (...) è una funzione insieme a un ambiente di riferimento per le variabili non locali di quella funzione. Una chiusura consente a una funzione di accedere a variabili al di fuori del suo immediato ambito lessicale.
Quindi una chiusura è essenzialmente un valore di funzione (anonimo?) Che può usare variabili al di fuori del proprio ambito. Nella mia esperienza, ciò significa che può accedere a variabili che rientrano nell'ambito nel suo punto di definizione.
In pratica, il concetto sembra divergere, almeno al di fuori della programmazione funzionale. Lingue diverse implementano semantica diversa, sembra addirittura che ci siano guerre di opinioni. Molti programmatori non sembrano sapere cosa siano le chiusure, considerandole poco più che funzioni anonime.
Inoltre, sembrano esserci grossi ostacoli nell'attuazione delle chiusure. In particolare, Java 7 avrebbe dovuto includerli, ma la funzionalità è stata rimandata a una versione futura.
Perché le chiusure sono così difficili (da capire e) da realizzare? Questa è una domanda troppo ampia e vaga, quindi lasciatemi concentrare di più con queste domande interconnesse:
- Ci sono problemi nell'esprimere le chiusure nei comuni formalismi semantici (piccolo passo, grande passo, ...)?
- I sistemi di tipo esistenti non sono adatti per le chiusure e non possono essere estesi facilmente?
- È problematico allineare le chiusure con una traduzione di procedure tradizionale basata su stack?
Si noti che la domanda riguarda principalmente i linguaggi procedurali, orientati agli oggetti e di scripting in generale. Per quanto ne so, i linguaggi funzionali non hanno alcun problema.