Dynamic scoping (was: Proposal: Squeak-E = Squeak x Kernel-E)

Lex Spoon lex at cc.gatech.edu
Wed Jan 29 08:28:01 UTC 2003


"Stephen Pair" <spair at acm.org> wrote:
> Avi Bryant wrote:
> > Well, yeah. :) I thought that's what you meant.  Obviously 
> > there's no reason you can't have the same interface to both 
> > implementation approaches.  I currently use an exception 
> > based dynamic scope that looks like
> > 
> > 
> > DynamicContext bind: #foo to: 42 during:
> >   [
> >     self assert: #foo dynamicValue = 42
> >   ]
> > 
> > self assert: #foo dynamicValue isNil.
> 
> Actually, I rather like the #dynamicValue pattern.  Why not this then:
> 

Best of all seems to be to tweak the compiler a little.  If we had
dynamically-bound global-scope variables, how often would we want to use
statically-bound global-scope variables?  I can't think of a single
case, and switching seems to quietly make some other things work better.
 For example, switching World to be a dynamic variable will allow
multiple worlds to coexist with very little code changes.

In Islands, the syntax is like this:

	World   "a dynamically-bound variable"

	!World  "an old-fashioned statically-bound variable.  only allowed in
rare privilaged methods"


I didn't hit on the wonderful idea of having the compiler send #value;
instead, the dynamic variable turned into bytecodes something like this:

	!Smalltalk readVariable: #World

Either way should be fine, though.  I think you want *some* mechanism to
break out, within the method.  If nothing else, it is nice to do things
like:

	aPrivilagedMethod
		!PrivilagedEnvironment clamp: [ ".. do some privilaged stuff.." ]


But maybe I just haven't thought enough about how to get rid of the last
few instances.


Lex



More information about the Squeak-dev mailing list