Dynamic scoping (was: Proposal: Squeak-E = Squeak x Kernel-E)
Stephen Pair
spair at acm.org
Mon Jan 27 14:29:27 UTC 2003
Anthony,
> I agree World is dynamic, especially in a multi-user system.
> But I would use the execution stack as the dynamic scope, not
> a sandbox/island. World would be obtained by raising a
> signal. Some context up the sender chain would respond to it
> and return it. This implies that some object that initiated
> the thread knows which World to act on, which seems
> appropriate for user actions and even the World stepping loop
> which would have an instance variable pointing to the actual
> active World.
>
> 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.
].
----
SomeClass>>doSomethingThatRequiresAWorld
(Env at: #world) doSomething.
----
A Morphic package could also extend the runtime environment accessor to
include #world and #world: methods to make the above even cleaner
looking.
- Stephen
More information about the Squeak-dev
mailing list
|