Foundationপ্রথম নীতি থেকে
LEVEL 5 · Programming Languages

Closure

ক্লোজার

একটা function value তার definition-site-এর environment-এর reference সাথে ধরে রাখে — তাই function ফেরত গেলেও সেই frame-এর variable গুলো জীবিত থাকে।

Function value = code + captured environment। দ্বিতীয় অংশটাই closure:

def make_adder(n):        # n — local
    return lambda x: x + n
add5 = make_adder(5)      # make_adder ফেরত গেছে
add5(3)                   # তবু n=5 জীবিত → 8
  • Lexical scoping মানে capture হয় definition-site-এর env, call-site-এর না
  • Captured variable যদি mutable হয়, সব closure একই cell share করে — এখানেই কমন bug
  • Runtime-এর দৃষ্টিতে closure একটা object: code pointer + env pointer — তাই env জীবিত থাকতে heap-এ থাকতে হয়, আর GC-র reachability-তে ঢোকে

Python-এ __closure__, JavaScript-এ অদৃশ্য, C-তে নেই (lambda+capture দিয়ে হাতে বানাতে হয়)।