foreach ... else statement
grauzone
none at example.net
Mon Jan 5 02:13:49 PST 2009
bearophile wrote:
> Don:
>> Actually Walter loves goto, so DMD copes really well with it.
>
> When possible it's better to use structured programming and avoid gotos. That construct can avoid gotos in some common situations.
> And regarding the compiler back-end, I think it's also better to start thinking what's good for LDC :-)
I don't know how relevant this is, but: LLVM uses SSA for registers, and
it seems to be simpler to convert code to SSA if there are no gotos:
"We show that it is possible to generate SSA form in a single pass (even
during parsing) if the program contains only structured control flow
(i.e., no gotos). For such programs the dominator tree can be built on
the fly, too."
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.45.4503
I also think that almost all common uses of gotos could be replaced by
introducing some new statements for structured control flow. Like
allowing the programmer to jump to the begin or end of a block using
break/continue, similar to loops. For example, in the Linux kernel, they
do the following for error handling:
void somefunction() {
do_stuff();
if (error)
goto error_exit:
do_more_stuff();
return;
error_exit:
handle_error();
}
This could be replaced by something like this:
void somefunction() {
error_exit: {
do_stuff();
if (error)
break error_exit;
do_more_stuff();
return;
}
handle_error();
}
D's scope can do the same thing.
More information about the Digitalmars-d
mailing list