What has you here today?    work history (html) about me tajik bookmarks

Walk of shame … Mmm, creamy … RMS & dynamic scope 21st of November, 2006 POST·MERIDIEM 01:32

The Editors, on blogging drunk:

Good morning, Sifu. My name is the Bitter Blinding Sun of The Dawn After. I want you to collect your things, mumble your goodbyes, and, ’neath my baleful gaze, begin that long, lonely, and profoundly shameful walk home. While you are walking, I’d like to propose a fun little fanfic contest the The Web’s Least Grateful Readers participate in […]

(Yes, yes, it’s much funnier if you’ve read the post in question before The Editors’ followup. Still, I think it is particularly funny, independent of that.)

Trevor ap Simon, on a Barcelona restaurant:

Bill Poser picks up the London Times story about the Black Mountains Smokery in Powys being ordered by trading standards to rename its Welsh Dragon sausages “Welsh Dragon Pork Sausages” to avoid disappointing lovers of the hot and spicy. God knows what they’d make of the new delicatessen or restaurant or whatever on Margarit in Barcelona’s Poble Sec district, which goes by the name of Onan.

That is a particularly ludicrous judgement from the UK trading standards people.

Stallman, early eighties, on Emacs Lisp and dynamic scope:

‘… his exact reply was that lexical scope was too inefficient.’

Now, dynamic scope—that is, the sort of scope that a language implements when this is always true:

(defun ζέτα ()
  "Just a simple function—ignore that its name is in Greek."
  (+ r 0))
 
(let ((r (random)))
  (assert (eq (ζέτα) r)))
is today noted for its inefficiency. With lexical scope—as in C—unless you’ve taken the address of a local variable and passed it to a called function, you can reasonably assume that the called function will not have modified variables local to the current function by side effect, because looking up through the stack is not supported by the language definition. With dynamic scope, not only can you not make that assumption, you don’t know your local variables aren’t modifying by side-effect local variables in an outer function, so basically every variable assignment that was typed by the programmer must be done at runtime.

Morphological suffix of the day: –обод is a Tajik suffix meaning ‘place, city, house, populated’ and is part of lots of place names in Central Asia, Persia and the Subcontinent; of the latter see Hyderabad, Islamabad.


Jesus, that was a soft-headed post, wasn’t it? The first paragraph I quoted was not remotely the funniest of the destination page, and my Lisp example is unreadable to anyone without experience in the language. Here’s it in C (note, this will intentionally not compile):

int
zeta (void)
{
    return r + 0;
}

int main (void) { int r = rand(); assert (r == zeta()); return 0; }

Comments are currently disabled.