2010/4/21 Lukas Renggli <[email protected]>:
>> thisContext is a special object for representing an activation in a
>> stack frame in a stack-based VM.
>
> Actually "thisContext" represents *the current* activation/stack-frame.
>
>    foo: anObject
>         ^ thisContext at: 1
>
> is the same as
>
>    foo: anObject
>         ^ anObject
>

Of course, "this" refers to "the current" in common language usage.

>> There are two kinds of contexts:
>> Method Contexts and Block Contexts.
>
> Actually in Pharo images there are only instances of MethodContext.
> Though you can ask the context if it comes from a block by sending the
> message #isExecutingBlock.
>

Actually in Pharo there is a BlockContext class, which is not
instantiated anymore after the introduction of the closure compiler?
In other Smalltalks aBlockContext is the resulting context of a block
activation during its evaluation and is activated by sending
#value,.this fills thisContext with the execution information inside
the block.

In Squeak (or the old compiler) block contexts were created using
#blockCopy:, now I see #closureNumCopied:numArgs:. Does this means
BlockContext could be completely removed and replaced with
MethodContext semantics? I've removed the BlockContext class and used
Pharo a little bit with no problems, maybe some Decompiler issues in
the Debugger...

Now, test yourself before evaluating :) what should be the result of
this expression?

[: arg | arg perform: #isExecutingBlock ] value: thisContext

Can somebody justify the result?

>> Context creation is optimized in the VM in most Smalltalks, so it's
>> only really created as an object in the environment (reified) when
>> it's specifically needed through "thisContext".
>
> In Pharo contexts are not reified like that. Stack-frames are actual
> objects at all times. However, for speed reasons, their creation and
> garbage-collection is optimized by the VM. Stack frames get
> automatically recycled if nobody refers to them.
>

I think is what I said :)

>> There are several applications related with computational reflection
>> (Reflective Programming, Meta-Programming, MOP, etc) which makes use
>> of the current context.
>
> Also: exception handling, generators, continuations, co-routines, ...
>
> For another fun use of "thisContext" check this Stack-Overflow question:
>
> http://stackoverflow.com/questions/2500483/is-there-a-way-in-a-message-only-language-to-define-a-whiletrue-message-without-r
>
> Lukas
>
> --
> Lukas Renggli
> www.lukas-renggli.ch
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to