Questions - RE: Dynamic scoping
Swan, Dean
Dean_Swan at Mitel.COM
Wed Jan 29 00:19:30 UTC 2003
Avi,
Thank you. I guess this means that I more-or-less got the big chunks.
-Dean
> -----Original Message-----
> From: Avi Bryant [mailto:avi at beta4.com]
> Sent: Tuesday, January 28, 2003 6:35 PM
> To: The general-purpose Squeak developers list
> Subject: Re: Questions - RE: Dynamic scoping
>
>
>
>
> On Tue, 28 Jan 2003, Swan, Dean wrote:
>
> > Please pardon my interruption, but 90% of this thread just makes my
> > head spin, so I have some questions:
> >
> > 1) Is it correct that this whole dynamic scoping thing is
> > limited to resolving references to named objects within
> > the context of an executing method?
>
> Yes. "Dynamic scoping" and "lexical scoping" are the two
> common ways for
> variables to be resolved. Smalltalk is lexically scoped,
> which means that
> variables names are resolved according to where the current method (or
> block) was created; early versions of lisp, for example, were
> dynamically
> scoped, which means that variable names are resolved
> according to where
> the current method was called from.
>
> For example, say you have a method like this:
>
> UndefinedObject>>blockAnswering: x
> ^ [x]
>
> And now in a workspace I do this:
>
> |block x|
> block := nil blockAnswering: 42.
> x := 23.
> block value.
>
> In Smalltalk, the block will return 42, because "x" is
> resolved by looking
> at the scope in which the block was created, and the first
> binding for the
> name "x" it finds is the parameter to #blockAnswering:, which is 42.
>
> In a dynamically scoped language, the same code would return
> 23, because
> it would look up the call stack instead, and the first "x" it
> would find
> is the one in the workspace.
>
> For hopefully obvious reasons, lexical scoping is almost
> always what you
> want. In a few cases, however, dynamic scoping is quite useful. All
> languages I know of use dynamic scoping for exception handling, for
> example: the current handler is found by walking up the call
> stack, not
> the lexical scope.
>
> Usually, you can think of dynamic scope as a fancy way of
> talking about
> "thread local variables", and it's useful in the same kinds of places.
> In Smalltalk, however, there's not always a one-one mapping between
> thread/Process and call stack - by sending #swapSender: to
> thisContext,
> for example, I can switch to a new call stack without
> changing Process.
> Because the Seaside web framework makes use of this kind of
> trick, I need
> to be more concerned than most people about the exact
> distinctions between
> "true" dynamic scope (which uses the call stack) and simple
> thread local
> storage. In particular, since Seaside allows the user
> (through the web
> browser's back button) to *return multiple times* to the same
> call stack,
> I have to be sure that dynamic state (like the current
> exception handlers,
> for example) is properly restored every time they do that.
>
> However, most of you can ignore Stephen and my babblings if
> you want to
> ;).
>
> > 2) If the answer to 1) is "yes", then couldn't the dynamic
> > scoping be accomplished by using accessor
> > methods instead of direct references to named objects?
>
> > If I'm understanding what is desired here, I'm not sure
> > why we need another mechanism for runtime binding of
> > names. It seems like you could accomplish the dynamic
> > scoping with just accessors and thisContext to trace
> > sender chains.
>
> I think Anthony's code does largely that. It doesn't do what I want,
> however, because there's no guarantee that the values will be
> restored if
> I reenter the same dynamic scope.
>
> > 3) Is the idea here related to namespaces, except with a
> > runtime context dependency?
>
> That was how this thread originally got started, with
> somebody (I think
> Lex) proposing that classes could be resolved using dynamic
> scope instead
> of being globals. That's not why I happen to be interested in dynamic
> scope, which probably just made what I was saying more
> confusing (though I
> think Stephen understood that). Apologies to those caught in the
> crossfire.
>
> ;)
> Avi
>
>
More information about the Squeak-dev
mailing list
|