On Thu, Apr 10, 2008 at 08:52:38AM -0700, jerry gay wrote:
: On Wed, Apr 9, 2008 at 10:31 PM, John M. Dlugosz
: <[EMAIL PROTECTED]> wrote:
: > Consider the words that may be used to introduce a block for a special
: > purpose, like
: > BEGIN
: > END
: > INIT
: > CATCH
: > etc.
: > What do you call those? They are not even "special named blocks" because
: > that is not the block name (that already means something).
: syntactically speaking, http://svn.pugscode.org/pugs/src/perl6/STD.pm
: groups them in <statement_control>, just like 'if' and 'for'.
: semantically speaking, i don't have a clever or unique name for them,
: other than what larry has already come up with.
It's a really good question, particularly because it's so exposed to the
user, so it needs to be something not too unwieldy. Semantically, they
are closures that are attached as properties of the surrounding lexical
scope, and since they're compile-time properties, they're declarative.
So we've been calling them closure traits. But I pretty certain we
should be using the term "block" here instead, even though they are
technically closures (or potentially closures, depending on how you
define that). But people will generally prefer the more concrete
"block" if there are always curlies involved, and people are already
used to saying "BEGIN block" and such.
And "traits" is also problematic; it says what they are, but not really
what they do. They're really "come froms" with predefined names that
are automatically called at the appropriate time. So I think perhaps
the best term for them might be something more like "event blocks",
blocks that are called if and when a particular event happens. That's
a more user-oriented definition.