Living on the Edge
I pinpointed the cause of my internal compiler errors while programming under C# in Visual Studio 2005. I included some of my errors in the comments of my post on Visual Studio 2005 Bugs.
Over the course of the Visual Studio beta program, I have encountered four different internal compilation errors. It appears that, as a programmer, I tend to stress test the language, not because of any overly complicated designs, but because I tend to live on the edge, forcing the compiler to do a lot more work on edge cases.
One of my bugs that I filed in the MSDN Product Feedback Center, in February involved a sealed virtual property, in which only one of the two accessors from a base class was overridden. What happened here was that the interaction of multiple special conditions was being tested.
- Overriding only one accessor.
- Sealing a virtual property, (not a simple method), with two accessors.
The internal errors that I am receiving now result from defining both a nongeneric type and a generic type of the same name. In this case, I had Tuple, Tuple<First, Second>, Tuple<First, Second, Third>. I also have a Node and a Node<A,T> in different namespaces. The compiler automatically generates special names for the generic types such as Tuple`1 and Node`2, depending on the number of type parameters used.
There is simply no reason for me to create unnecessary disambiguation work for the compiler. I could simply rename Tuple<F,S> to Pair<F,S> and Tuple<F,S,T> to Triple<F,S,T>. Making the compiler happy will ultimately make you happy.
Lesson for today: Try not to live on the edge.