> 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
> 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.
> 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.
> 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