Dynamic scoping (was: Proposal: Squeak-E = Squeak x Kernel-E)
ajh18 at cornell.edu
Mon Jan 27 18:09:51 UTC 2003
"Stephen Pair" <spair at acm.org> wrote:
> Anthony wrote:
> > So I think both static scope (pools) and dynamic scope
> > (contexts) are appropriate. The significance is dynamic
> > scope is not an extra concept like islands. I believe this
> > is more in line with the objects-as-capabilities concept.
> Have you looked at RuntimeEnvironments (on SqueakMap)? They accomplish
> the same effect, but they are cleaner than using exceptions...they also
> work when a process is forked. To do what you describe would look like:
> Env clamp: [
> Env at: #world put: aWorld.
> self doSomethingThatRequiresAWorld.
> (Env at: #world) doSomething.
Sorry, Stephen, I forgot to mention your work. Our two implementations
are basically equivalent. I think mine is a little faster since it
reuses the context sender chain (hierarchy) instead of creating a new
parallel environment hierarchy. This allows me to re-implement
Exceptions to use my general context handlers/environments, without loss
of efficiency. Your point about environments being inherited by forked
processes is a nice option, but I wouldn't leave out exception handlers
from being inherited also. I believe exception handlers and dynamic
variables should be treated the same, not differently. (It would not be
hard to fork a process with the initial context holding context handlers
from its parent process).
More information about the Squeak-dev