On 17 Aug, Yukihiro Matsumoto wrote: > Hi, > > In message "[ruby-talk:00667] How do I use `callcc'" > on 99/08/15, Clemens Hintze <c.hintze / gmx.net> writes: > [...] > > Continuations are say dynamic labels; you can't alter them. But > using it, you can emulate coroutines. Here's something similar. [...] Thanks for the example. Now some things are a lot more clear to me! :-) > > By the way, why don't you use thread, instead of emulating coroutine > by yourself. Sometimes a coroutine can be of more use than a thread. With coroutines I can emulate threading with an own scheduler adapted to my needs. So perhaps Ruby could also have threading even on MSDOS? ;-))) Furthermore I have not pay too much attention to synchronize issues with coroutines... Often coroutines are better for RT tasks than threads, etc. pp. :-) > > |I have thougth, the execution would go back till after (1), so that the > |calculation will be performed, and then the result would be returned. > |But it seems also to influence the global execution. Because it goes > |not only back to (1) but back to (2). > > As I said before continuations are labels. calling Continuation#call > jumps into the place where the continuation created. I have understood that! But not with all consequences. The surprising fact for me was, that this `dynamic label' would also influence the state of the level that called the method, that use `callcc def crea_cont callcc {|c| return c} # 1 1 end f = crea_cont # 2 p f => #<Continuation:0x3b738> f.call p f => 1 That means `f.call' was returning to (#1) but after leaving of method `crea_cont' I was suddenly on (#2), so that `f' was reassigned. That has astonished me. :-))))) > > matz. \cle