[#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:01143] Re: Continuations...
From:
matz@... (Yukihiro Matsumoto)
Date:
2000-01-15 07:40:21 UTC
List:
ruby-talk #1143
Hi,
In message "[ruby-talk:01142] Continuations..."
on 00/01/15, Dave Thomas <Dave@thomases.com> writes:
| 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).
`again' was set. `scary' returns twice. once returns a continuation,
then a string 'xxx', which is the value of the last expression.
|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.
Continuations are implemented by using thread structures. On creating
a new continuation, current context, including closure, is copied into
internal thread structure. On the call, the saved context is restored
by the thread context swtching, 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).
Hmm, typical use of the continuations in Scheme is user level
threading and global jump, but Ruby already has both features.
matz.