About switch case statements...
Don
nospam at nospam.com
Sun Nov 15 11:50:24 PST 2009
Andrei Alexandrescu wrote:
> Chad J wrote:
>> So, switch-case statements are a frequent source of nasty bugs. Fixing
>> them (well) requires breaking backwards compatibility.
>>
>> Any chance this will happen for D2?
>>
>> (This is intended as more of a reminder and simple curiosity than a
>> discussion.)
>
> I wish very much that a transferring control flow statement (break,
> return, goto etc.) is required at the end of each case. Then, the rare
> case when you want to break through is easy to implement as goto case
> xxx; and all is good.
>
> Walter's answer to that has put me to silence for good. "But I use
> fall-through all the time!" I then knew the feature will never make it.
Walter definitely *thinks* he uses fall-through all of the time. BUT...
Does he *really* use it all the time? It's not a matter of opinion; it's
an objective question, answerable since so much of his code is now
publically available. I got a bit interested in knowing how much he does
use it.
I consider that fallthrough requires a non-empty statement. IE,
case A:
case B:
case C:
dosomething();
break;
is not a real fallthrough; those would always be allowed.
I looked through a couple of DMD files: parse.c, (the parser), and
cod3.c (the largest file in the back-end).
In cod3, there are 381 case statements. There are 3 occasions where
fallthrough is used. In two of those cases, they fallthrough to a label
where other cases have 'goto' that label. In the remaining case, the
code which was fallen through was an assert and a debug print statement.
parse.c has 541 case statements, I didn't find any fallthroughs in the
first half of the code, but I didn't look as thoroughly as I did in cod3.
Based on this, it looks to me as though Walter uses fall-through very,
very rarely. Less than 1% of all case statements.
For comparison, those files contain 178 and 137 gotos, respectively <g>.
Walter does use 'goto'. He doesn't use fallthrough in switch statements.
It's actually not something I care about at all. But I think Walter's
wrong about his coding style. And looking at how rarely it's actually
used by someone who thinks he uses it a lot, convinces me that
intentional use of fall-through is much less common than bugs introduced
by leaving out a break statement.
An interesting result.
But I'd much rather change Walter's mind about opPow() or the
meta.compiles(XXX) proposal.
More information about the Digitalmars-d
mailing list