dmd 1.046 and 2.031 releases

Chad J chadjoan at __spam.is.bad__gmail.com
Mon Jul 6 13:26:15 PDT 2009


Andrei Alexandrescu wrote:
> Chad J wrote:
>>
>> These bugs always take me no less than 2 hours to find, unless I am
>> specifically looking for fall-through bugs.
> 
> I agree. Probably a good option would be to keep on requiring break, but
> also requiring the user to explicitly specify they want fallthrough in
> the rare case when they do want it. I'd love to use "continue" for that
> but it's already "occupied" by cases like while (...) switch (...).
> Requiring !break or ~break would work but is a bit too cute. Adding a
> new keyword or a whole new switch statement is too much aggravation. I
> guess we'll have to live with it...
> 
> 
> Andrei

Don't marginalize something that's important!

The syntax is arbitrary.  Just pick something that works.

Also, IIRC, the main argument in favor of fallthrough behavior was
compatibility with C code.  Now that we have "final switch", we can,
with reasonable certainty, assume that no C coder has written "final
switch(...) ...".  Thus we are allowed to choose a syntax that's
different without breaking anything.  And for those few people that want
to write Duff's device, they can just use the old style switch-case.

<rambling and syntax>
I'm personally a bit biased to the haXe switch-case statements that I've
been using for the past few months.  In haXe you don't even have to
write break; at the end, it will always exit the statement at the end of
a case-block.  It also has that behavior added in final switch where
switching on an enum requires you to be exhaustive about your handling
of the possibilities.  It has worked well.  If it isn't powerful enough,
there's always "goto label;" where label is either some external label
or the name of one of the cases.  I think I've seen that in C#.  That
also worked well.

So something like this:

final switch( foo )
{
	case 0: goto 1; // emulate the fallthrough
	case 1: writefln("Got a zero or a one.");
	case 2: writefln("This isn't supposed to happen.");
}

I wouldn't complain if it was done some other way though.  Just killing
the fallthrough bugs would make me so much happier.
</rambling and syntax>


More information about the Digitalmars-d-announce mailing list