I got an email from a customer today, in which he noted that the C# compiler allows
you to write:
bool b = …
despite the fact that the spec does not list bool as one of the types
that you can switch on.
Unfortunately, we’ve shipped the current behavior, and one of our high-order goals
is not to break existing code by changing the compiler. In most cases, that’s a really
good goal, as your customers are justifiably upset when the new compiler breaks their
In this case, however, I think we may be going to far in not fixing a bug because
there’s a chance somebody might have written code that used it. I’m therefore looking
for your opinion (noting, for the record, that it seems that I could sometimes be
replaced by an auto-blogger question-asking piece of software) on what makes the most
How would you have us trade off language conformance (and perhaps language innovation)
vs language stability?
More specifically, when is it acceptable for the compiler to give an error on code
that used to work?