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