About switch case statements...

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Nov 15 13:01:33 PST 2009


Don wrote:
> 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.

Don       <----------        genius

I understand that you're more interested about the issues that preoccupy 
you (and incidentally me) the most, but "switch" is a day-to-day 
programming (and programmer's) workhorse, so a change there might have a 
wider (and hopefully more positive) impact.


Andrei



More information about the Digitalmars-d mailing list