[#1026] Is this a bug? — Dave Thomas <Dave@...>

18 messages 2000/01/03

[#1084] Infinite loop — Dave Thomas <Dave@...>

17 messages 2000/01/11

[#1104] The value of while... — Dave Thomas <Dave@...>

24 messages 2000/01/11

[ruby-talk:01142] Continuations...

From: Dave Thomas <Dave@...>
Date: 2000-01-15 06:36:19 UTC
List: ruby-talk #1142
I wanted to make sure I understood continuations, so I thought I'd try 
to write it down, and then let you folks shoot at it. Please-what have 
I missed, and what additional subtleties are there?

Thanks

Dave

===================================================================

Continuations are basically a setjump/longjump combined with a
closure. I dug out the Scheme reference manual--they call it
call-from-current-continuation.

I'm sure "it's more subtle than this" but..

     callcc { |c|

        stuff

     }
     <<exit>>

generates a Continuation object in 'c'. If at any point you invoke
c.call, control is transferred to the end of the continuation (where I 
put <<exit>>). You can even do things like

     def scary
       callcc { |c|
         return c
       }

       p "Here we go"
       'xxx'
     end

     p "Start"
     again = scary
     p "Back"
     again.call
     p "Done"


which generates:

     "Start"
     "Back"
     "Here we go"
     "Back"
     -:12: undefined method `call' for "xxx":String (NameError)

Note the scary way that the continuation call both re-enters the
original routine and then exits back out as if it had never been left
(and hence 'again' isn't set, and you get the error).

Continuations are implemented in Ruby by effectively starting a new
thread for the continuation, suspending the original. On the call, the
original thread is resumed, hence the ability to travel back in time.

Now if I could only think of a use for them (apart from getting out of 
deeply nested routines/loops).


-- 
Thomas Consulting.
Innovative and successful developments with Unix, Java, C, and C++. 

Now in bookstores:
 The Pragmatic Programmer.  www.pragmaticprogrammer.com/ppbook/

In This Thread

Prev Next