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

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