In Programmiersprachen sind Verschlüsse ein beliebtes und oft gewünschtes Merkmal. Wikipedia sagt (Hervorhebung von mir):
In der Informatik ist ein Closure (...) eine Funktion zusammen mit einer Referenzierungsumgebung für die nicht lokalen Variablen dieser Funktion. Ein Closure ermöglicht es einer Funktion, auf Variablen außerhalb ihres unmittelbaren lexikalischen Bereichs zuzugreifen.
Ein Closure ist also im Wesentlichen ein (anonymer?) Funktionswert, der Variablen außerhalb seines eigenen Gültigkeitsbereichs verwenden kann. Nach meiner Erfahrung bedeutet dies, dass auf Variablen zugegriffen werden kann, die sich an ihrem Definitionspunkt im Gültigkeitsbereich befinden.
In der Praxis scheint sich das Konzept jedoch zumindest außerhalb der funktionalen Programmierung zu unterscheiden. Verschiedene Sprachen implementieren unterschiedliche Semantiken, es scheint sogar Meinungsverschiedenheiten zu geben. Viele Programmierer scheinen nicht zu wissen, was Abschlüsse sind, und betrachten sie nur als anonyme Funktionen.
Auch bei der Umsetzung von Schließungen scheinen große Hürden zu bestehen. Am bemerkenswertesten ist, dass Java 7 sie enthalten sollte, aber die Funktion wurde auf eine zukünftige Version zurückgesetzt.
Warum sind Verschlüsse so schwer zu verstehen und zu realisieren? Dies ist eine zu weit gefasste und vage Frage, daher möchte ich mich auf diese miteinander verbundenen Fragen konzentrieren:
- Gibt es Probleme beim Ausdruck von Abschlüssen in gemeinsamen semantischen Formalismen (kleine Schritte, große Schritte, ...)?
- Sind vorhandene Typsysteme nicht für Verschlüsse geeignet und können nicht einfach erweitert werden?
- Ist es problematisch, Verschlüsse an eine herkömmliche stapelbasierte Verfahrensübersetzung anzupassen?
Beachten Sie, dass sich die Frage hauptsächlich auf prozedurale, objektorientierte und Skriptsprachen im Allgemeinen bezieht. Soweit ich weiß, haben funktionale Sprachen keine Probleme.