|Thunk routines DAVEJ3@Prodigy.Net (DAVEJ3) (1998-02-20)|
|Re: Thunk routines email@example.com (1998-03-03)|
|Re: Thunk routines firstname.lastname@example.org (1998-03-03)|
|Re: Thunk routines Nick.Roberts@dial.pipex.com (Nick Roberts) (1998-03-06)|
|Re: Thunk routines email@example.com (1998-03-06)|
|From:||"Nick Roberts" <Nick.Roberts@dial.pipex.com>|
|Date:||6 Mar 1998 16:49:40 -0500|
The following is pulled directly off DejaNews.
Subject: Re: Shared Generic Instance Code
From: "Nick Roberts" <Nick.Roberts@dial.pipex.com>
Robert A Duff <firstname.lastname@example.org> wrote in article
> In article <email@example.com>,
> Nick Roberts <Nick.Roberts@dial.pipex.com> 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) ...
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
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).
------------ Nick Roberts
---------- Croydon, UK
------ Voicemail & Fax +44 181-405 1124
---- Proprietor, ThoughtWing Software
-- Independent Software Development Consultant
Return to the
Search the comp.compilers archives again.