PROPOSAL: goto-out-of-delegates = continuations
Russell Lewis
webmaster at villagersonline.com
Mon Apr 21 15:55:50 PDT 2008
Back in January, I proposed a "goto-out-of-delegates" feature. At the
time, I didn't see a need for it except as a possible alternative to
exceptions. Now I've come to realize that what I proposed is
essentially continuations, or, to be more specific, something MORE
GENERAL than continuations.
Wikipedia has a better description
(http://en.wikipedia.org/wiki/Continuation), but in summary, a
continuation can be thought of as a delegate that, when it is called,
breaks out of the current call stack, unwraps it, and continues
execution at the point where the continuation was created. But with my
goto-out-of-delegates proposal, you can continue *anywhere* in the
original function, not just at the point immediately after the delegate
was created. Some languages allow a continuation to be called multiple
times (my proposal would allow this trivially).
Open question: would this type of continuation make any sense if the
creating function exited? If we wanted to allow it, what exactly would
a "return" mean from a continuation?
The idea is to make this syntax legal:
PROPOSED CODE
void foo()
{
void NestedFunc(int i)
{
if(i == 0)
goto LABEL_1;
else
goto LABEL_2;
}
<do stuff>
bar(&NestedFunc);
<if bar() returns without ever calling the delegate,
then we run here>
LABEL_1:
<if bar() calls dg(0), then the dg goto's here>
LABEL_2:
<if bar() calls dg(1), then the dg goto's here>
}
END CODE
More information about the Digitalmars-d
mailing list