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
