Hello, The pharo continuations were ported from seaside because several people were using seaside continuations in non seaside related projects.
I wouldn't rely on assigning the receiver on thisContext because it's a bit buggy. See: ByteSymbol>>bar thisContext receiver: #foo. ^ self 10 timesRepeat: [Transcript show: #bar bar] Transcript: foofoofoobarbarbarbarbarbarbar 2014-03-25 0:58 GMT+01:00 Eliot Miranda <[email protected]>: > > > > On Mon, Mar 24, 2014 at 4:33 PM, [email protected] <[email protected]>wrote: > >> On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda >> <[email protected]>wrote: >> >>> >>> >>> >>> On Mon, Mar 24, 2014 at 4:02 PM, [email protected] >>> <[email protected]>wrote: >>> >>>> I am curious. >>>> >>>> Maybe on the first one, substitute something when a DNU is encountered. >>>> Like logging undefined receivers. >>>> >>>> I wonder how the next one behaves on JITted methods. I fear that offset >>>> errors may lead to weird errors. >>>> >>> >>> It *should* "just work" :-) (provided the jump distance of -12 is >>> correct). The VM traps assignments to variables of contexts, and converts >>> them to vanilla contexts. Therefore the jump doesn't occur in JITTED code >>> but back in normal interpreted bytecode. >>> >>> >> How magical! >> >> >>> On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek < >>>> [email protected]> wrote: >>>> >>>>> Who can find the most useful usage of this? >>>>> >>>>> thisContext instVarNamed: #receiver put: 42. >>>>> self factorial >>>>> >>>>> GOTO statement in Pharo: >>>>> >>>>> FileStream stdout nextPutAll: 'Hello world'; lf. >>>>> thisContext jump: -12. >>>>> Let's collect the next ones :-) >>>>> >>>> >>> this is my favourite, and would lock-up a strict blue book VM. (I once >>> locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased >>> [forgive me Allen]) >>> >>> >>> | a | >>> a := Array with: #perform:withArguments: with: nil. >>> a at: 2 put: a. >>> a perform: a first withArguments: a >>> >>> ;-) >>> >>> >> >> The infinite is near. >> >> Not as blocking, but still... (Alt-. interrupts this one) >> >> Crazy>>run >> Continuation currentDo: [ :cc | here := cc ]. >> here value: true. >> >> Crazy new run >> >> BTW, is there any support for partial continuations in Pharo? >> Continuations like this one look like full continuations and that's *huge*. >> > > Yes, see Seaside. Remember a Process is simply a linked list of context > /objects/, so it is easy to copy as much or as little of one as one wants. > > >> >> >> >>>>> Cheers, >>>>> -- Pavel >>>>> >>>> >>>> >>> >>> >>> -- >>> best, >>> Eliot >>> >> >> > > > -- > best, > Eliot >
