thunk /thuhnk/ n.
1. [obs.]"A piece of coding which provides an address",
according to P. Z. Ingerman, who invented thunks in 1961 as a way
of binding actual parameters to their formal definitions in
Algol-60 procedure calls. If a procedure is called with an
expression in the place of a formal parameter, the compiler
generates a thunk which computes the expression and leaves the
address of the result in some standard location. 2. Later
generalized into: an expression, frozen together with its
environment, for later evaluation if and when needed (similar to
what in techspeak is called a `closure'). The process of
unfreezing these thunks is called `forcing'. 3. A stubroutine, in an overlay programming
environment, that loads and jumps to the correct overlay. Compare
trampoline. 4. People and
activities scheduled in a thunklike manner. "It occurred to me
the other day that I am rather accurately modeled by a thunk -- I
frequently need to be forced to completion." -- paraphrased from
a plan file.
Historical note: There are a couple of onomatopoeic myths
circulating about the origin of this term. The most common is
that it is the sound made by data hitting the stack; another
holds that the sound is that of the data hitting an accumulator.
Yet another suggests that it is the sound of the expression being
unfrozen at argument-evaluation time. In fact, according to the
inventors, it was coined after they realized (in the wee hours
after hours of discussion) that the type of an argument in
Algol-60 could be figured out in advance with a little
compile-time thought, simplifying the evaluation machinery. In
other words, it had `already been thought of'; thus it was
christened a `thunk', which is "the past tense of `think' at two
in the morning".