[self-interest] Block activation verification...

Dru Nelson dru at redwoodsoft.com
Sat Jun 3 22:26:40 UTC 2000

First, Thanks Jecel!

> True. This greatly offends some people who feel they are being cheated
> by these tricks. This led me to take a look at some outliners for

Yes, I understood the hidden slots. I don't feel tricked :-)

> Variable scoping in other languages is simulated in Self using object
> inheritance. By making the implicit receiver be the current context and
> having that point to the original receiver via a self* parent slot, you
> can access both "local variables" and "instance variables" (and "class
> variables! And "globals") in a uniform way.

Yes, I understood this part too. A very elegant solution.

> this (and it would be a good idea to know this anyway since otherwise
> we can't execute the "non local return" bytecode, the "^").

Now to the heart of the question  :-)

> > (3 < 4) ifTrue: [ ^nil ].
> > 
> > How is that done? 
> Yet another trick - when the bytecode tells us to push a block on the
> stack, we create a clone of it with an extra slot to point to the
> currently executing context and push that instead. Note that you can't
> see this in the debugger - it does every thing it can to make you think
> that the original block was used, not its evil twin ;-)
> Now when we send the 'value' message, it will go to the modified clone
> instead of the block, and this clone does know about the context we are
> interested in and so can fill in the 'lexicalParent*' slot correctly.
> >From now on, everything works as claimed.

OK, this is the trick I was looking for. I read about this in the slides
and the Self 4.0 progs' ref.  However, I didn't know how the final 
clone was created *efficiently*. In order for this to work in a naive
way, every push of a reference would have to know if the argument
was a block (a significant read barrier).  Or a block would be a 
special object type specified in the reference so the bytecode could 
do this.

Is that how it works?

> Don't worry too much about understanding all this... Self doesn't
> really work this way at all under the hood!!

I'm sure the optimizer is a whole other field in itself :-)

> So David's answer was probably just what you needed :-)

The last trick is the answer I needed.

Dru Nelson
San Mateo, California

More information about the Self-interest mailing list