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
