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.