On 2007.11.22., at 18:01, Thomas wrote:

> Thanks! This explains the strange behavior.
> Anyhow, it should be documented somewhere that the implementation of
> continuations in Rhino is only half done and only works on a language
> subset. I mean, how can a normal user know that.

He can't and is not expected to. This is clearly a bug, one we didn't  
realize was there before. If we did, we wouldn't have documented it,  
we would have fixed it. It's true that I immediately figured out  
what's wrong with it when you reported the problem, but that doesn't  
mean I was consciously aware of this before. I wasn't.

I have a production system myself that heavily uses continuations, and  
you can imagine I did run into a fair amount of problems myself; I'm  
fixing them when I can. I.e. there was an issue that capturing a  
continuation in a loop and then trying to serialize it bombed because  
the loop iterator wasn't serializable. Then we had a similar problem  
where capturing a continuation in a catch() block or in a with() block  
and trying to serialize it also bombed because - you guessed - the  
object used for representing the catch and with scopes wasn't  
serializable. And so on.

We're making things better on the go, as we can afford to spend our  
spare time on it. I'm sorry for your inconvenience (and everyone  
else's who runs into a Rhino bug), but it's a fact that not everything  
is always bug free.

Attila.


> It took me quite a while
> just to find out what causes the problem. Also, why leaving the  
> interpreter
> loop at this point? What's so different to a normal function call  
> (other
> than the explicitely defined this object)?
>
> Thanks for your help!
> Cheers, Thomas
>
> "Attila Szegedi" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED] 
> ...
>> Hm... that's indeed a problem. Without looking at the code, I  
>> actually
>> have an idea why it doesn't work. Continuations work only within a   
>> single
>> invocation of Rhino's stackless interpreter loop. If you call  out  
>> of the
>> interpreter loop into Java code (which call() and apply()  will  
>> do), and
>> then back into a new instance of interpreter loop (which  an  
>> interpreted
>> function will do to run its implementation), a  continuation will  
>> not work
>> correctly. It can only capture/unwind  within the current  
>> interpreter loop
>> invocation.
>>
>> It'd be possible to apply a bit of a trickery in interpreter loop to
>> detect when call/apply is invoked for an InterpretedFunction  
>> instance,
>> and run it in the current interpreter loop.
>>
>> Attila.
>>
>> --
>> home: http://www.szegedi.org
>> weblog: http://constc.blogspot.com
>>
>> On 2007.11.22., at 17:03, Thomas wrote:
>>
>>> I'm heavily using continuations and noticed that they don't work
>>> correctly
>>> if my code uses the call() or apply() functions on Function  
>>> objectes  to
>>> invoke a function. Just wondering if anybody had similar experience?
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to