# Living on the Edge

11/7/2005 8:28:14 AM

## 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.

1. Overriding only one accessor.
2. 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 Tuple1 and Node2, 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.