У мовах програмування закриття - популярна і часто бажана особливість. Вікіпедія говорить (моє наголос):
В інформатиці закриття (...) - це функція разом із референтним середовищем для нелокальних змінних цієї функції. Закриття дозволяє функції отримувати доступ до змінних за межами її безпосередньої лексичної області.
Отже, закриття - це, по суті, значення (анонімне?), Яке може використовувати змінні за межами своєї власної області. На мій досвід, це означає, що він може отримати доступ до змінних, які знаходяться в області застосування в його точці визначення.
На практиці, здається, концепція розходяться, хоча б поза функціональним програмуванням. Різні мови реалізують різну семантику, навіть, здається, існують війни опінонів. Багато програмістів, здається, не знають, що таке закриття, розглядаючи їх як трохи більше, ніж анонімні функції.
Також, мабуть, існують великі перешкоди при здійсненні закриття. Найпомітніший, Java 7 повинен був включати їх, але ця функція була повернута до майбутнього випуску.
Чому закриття так важко (зрозуміти і) реалізувати? Це занадто широке і розпливчасте запитання, тому дозвольте мені зосередитися на цих взаємопов’язаних питаннях:
- Чи є проблеми із вираженням закриттів у загальних семантичних формалізмах (малий крок, великий крок, ...)?
- Чи існуючі системи типу не підходять для закриття і їх не можна легко поширити?
- Чи проблематично привести закриття у відповідність до традиційного перекладу процедур на основі стеку?
Зауважимо, що питання стосується здебільшого процедурних, об'єктно-орієнтованих та сценарійних мов загалом. Наскільки мені відомо, функціональні мови не мають жодних проблем.