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