grauzone wrote:
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
It's possible to create grotesque configurations of 'goto' which are
extremely difficult to analyze. But most uses of goto are simple.
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.