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
>

Reply via email to