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.

Reply via email to