Saturday, May 30, 2009

Radical Lexicon: "Force the Thunk"

"Force the Thunk": I have seen this term several times on the org-mode mailing list. Here is are a few snippets from the Jargon List (hacker's dictionary, installable with apt-get on Ubuntu GNU/Linux installations). These are definitions for "thunk", with a hiistorical note at the end. I must preface these: I have no idea what this is all about. I can code a little simple lisp, but this involves, I think, run time composition of code, something list is known for. (Or NOT.) I am intrigued, and I hope to figure out how this works.

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.

5. A person or activity 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".

No comments: