I love reading the Mono source. The contributors have done such an awesome job.
// LAMESPEC: is funny. There's nothing quite like an _implementation_ to point out the gaps in your specification..
Rotor is cool too, as are the Common Language Infrastructure (CLI) and C# Language specifications (except for when they're lame! ;)
I've been thinking about the whole operator overloading thing, and wrote some sample code to test a few things, then got confused by what was going on, so I went to check out the various implementations, so much easier to read code than a LAMESPEC.
SqlInt32 i = new SqlInt32(123);
SqlInt32 i1 = SqlInt32.Null;
SqlInt32 i2 = SqlInt32.Null;
if (i1 == i2) { // (note: there must be an implicit SqlBoolean=>bool cast here!
Console.WriteLine("you won't see this");
}
Console.WriteLine(i == i1); // SqlBoolean.Null
Console.WriteLine(i1 == i2); // SqlBoolean.Null
Console.WriteLine(Object.ReferenceEquals(i1, i2)); // false (boxing)
Console.WriteLine(i1.Equals(i2)); // true (shit hey)
John.