Re: Thunk routines

"Nick Roberts" <>
6 Mar 1998 16:49:40 -0500

          From comp.compilers

Related articles
Thunk routines DAVEJ3@Prodigy.Net (DAVEJ3) (1998-02-20)
Re: Thunk routines (1998-03-03)
Re: Thunk routines (1998-03-03)
Re: Thunk routines (Nick Roberts) (1998-03-06)
Re: Thunk routines (1998-03-06)
| List of all articles for this month |

From: "Nick Roberts" <>
Newsgroups: comp.compilers
Date: 6 Mar 1998 16:49:40 -0500
Organization: Compilers Central
Keywords: history

The following is pulled directly off DejaNews.


Subject: Re: Shared Generic Instance Code
From: "Nick Roberts" <>
Date: 1997/04/05

Robert A Duff <> wrote in article
> In article <01bc4155$221728e0$>,
> Nick Roberts <> wrote:
> >Don't get confused between 'thunking' and mere indirect jumping/calling.
> >thunk is where a direct jump/call vector is replaced at runtime (and is
> >thus a one-time thing per execution).
> I don't think that's right. I once spoke with Mike Woodger about this
> (around 1992 or so). He was involved in the original Algol 60, and I
> think that's where the term "thunk" originated.

Fascinating, Captain. Here's what I find in Craig Servin's hacker guide
(usually pretty authoritative) ...



/thuhnk/ n.

1. "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 to compute the expression and leave 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 holds 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".


So, I knew of the latter meaning (no 2), and you of the earlier one (no 1).
We _were_ both right!

And yes, a little bit of history/culture/whatever is interesting, without
taking it _too_ seriously, perhaps!



You may well wish to edit this before posting it (or direct me to edit it,
or just provide a pointer to it in DejaNews).

Best regards.

------------ Nick Roberts
---------- Croydon, UK
------ Voicemail & Fax +44 181-405 1124
---- Proprietor, ThoughtWing Software
-- Independent Software Development Consultant

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.