Thunk
থাংক
এখনো evaluate না হওয়া expression-কে parameterless function মুড়ে ঝুলিয়ে রাখা — lazy evaluation-এর মূল যন্ত্র।
Eager ভাষায় expr সঙ্গে সঙ্গে চলে; lazy ভাষায় ওটাকে মুড়ে রাখা হয়:
thunk = lambda: expensive() # এখনো চলেনি
value = thunk() # প্রথম দরকারে চললো
- Call-by-name: প্রতিবার re-evaluate; call-by-need: একবার evaluate করে memoize — Haskell-এর পথ
- Trampoline-based interpreter-এ tail call-ও thunk হিসেবে ফেরত আসে
- খরচ: প্রতিটা deferred expr-এ একটা closure + একটা cell — তাই thunk-ও GC-র জন্য reachable object