[#1026] Is this a bug? — Dave Thomas <Dave@...>
18 messages
2000/01/03
[#1053] rand() / drand48() — ts <decoux@...>
11 messages
2000/01/05
[#1055] Re: rand() / drand48()
— matz@... (Yukihiro Matsumoto)
2000/01/05
[#1061] Re: rand() / drand48()
— gotoken@... (GOTO Kentaro)
2000/01/07
Hi,
[#1067] Here docs not skipping leading spaces — Dave Thomas <Dave@...>
5 messages
2000/01/08
[#1083] YADQ (Yet Another Dumb Question) — Dave Thomas <Dave@...>
12 messages
2000/01/10
[#1084] Infinite loop — Dave Thomas <Dave@...>
17 messages
2000/01/11
[#1104] The value of while... — Dave Thomas <Dave@...>
24 messages
2000/01/11
[#1114] Re: The value of while...
— Dave Thomas <Dave@...>
2000/01/12
matz@netlab.co.jp (Yukihiro Matsumoto) writes:
[#1128] Re: The value of while... — David Suarez de Lis <excalibor@...>
Hi all,
1 message
2000/01/12
[#1133] Re: Class variables... — David Suarez de Lis <excalibor@...>
Hi there,
2 messages
2000/01/12
[#1158] Is this expected behavior? — Dave Thomas <Dave@...>
6 messages
2000/01/21
[#1172] Re: Possible bug in ruby-man-1.4 — Huayin Wang <wang@...>
> |Well, I guess it comes down to what you mean by an integer
10 messages
2000/01/24
[#1177] Re: Possible bug in ruby-man-1.4
— Dave Thomas <Dave@...>
2000/01/25
matz@netlab.co.jp (Yukihiro Matsumoto) writes:
[#1188] Enumerable and index — Dave Thomas <Dave@...>
5 messages
2000/01/27
[#1193] Semantics of chomp/chop — Dave Thomas <Dave@...>
7 messages
2000/01/28
[#1197] Question about 'open' — Dave Thomas <Dave@...>
8 messages
2000/01/30
[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/