Dalam bahasa pemrograman, penutupan adalah fitur yang populer dan sering diinginkan. Wikipedia mengatakan (beri penekanan pada saya):
Dalam ilmu komputer, closure (...) adalah fungsi bersama-sama dengan lingkungan referensi untuk variabel non-lokal dari fungsi itu. Penutupan memungkinkan suatu fungsi untuk mengakses variabel di luar lingkup leksikal langsungnya.
Jadi penutupan pada dasarnya adalah nilai fungsi (anonim?) Yang dapat menggunakan variabel di luar cakupannya sendiri. Dalam pengalaman saya, ini berarti dapat mengakses variabel yang ada dalam ruang lingkup pada titik definisi.
Dalam praktiknya, konsepnya tampaknya menyimpang, setidaknya di luar pemrograman fungsional. Bahasa yang berbeda menerapkan semantik yang berbeda, bahkan tampaknya ada perang pendapat. Banyak programmer tampaknya tidak tahu apa penutupan itu, melihat mereka sebagai lebih dari fungsi anonim.
Juga, tampaknya ada hambatan besar ketika menerapkan penutupan. Paling menonjol, Java 7 seharusnya menyertakan mereka tetapi fitur itu didorong kembali ke rilis masa depan.
Mengapa penutupan begitu sulit (untuk dipahami dan) untuk direalisasikan? Ini adalah pertanyaan yang terlalu luas dan tidak jelas, jadi izinkan saya lebih memfokuskannya dengan pertanyaan yang saling terkait ini:
- Apakah ada masalah dengan mengekspresikan penutupan dalam formalisme semantik yang umum (langkah kecil, langkah besar, ...)?
- Apakah sistem tipe yang ada tidak cocok untuk penutupan dan tidak dapat diperpanjang dengan mudah?
- Apakah bermasalah untuk membuat penutupan sejalan dengan terjemahan prosedur tradisional berbasis stack?
Perhatikan bahwa pertanyaan ini sebagian besar berkaitan dengan bahasa prosedural, berorientasi objek, dan skrip pada umumnya. Sejauh yang saya tahu, bahasa fungsional tidak memiliki masalah.