Developmentor's Conference.NET quotes (Don Box)

Rohit Khare Rohit@KnowNow.com
Mon, 13 Aug 2001 14:19:05 -0700


So much to my utter nonsurprise, I got nowhere at Developmentor's 
registration desk until I said I was the "Driving Don Box' guy. 
*THAT* people remember. I guess it almost makes it worth the cost of 
two flat tires and a lifetime of AAA fees :-)

Today is tutorial day, so not much is going on yet. And I can only be 
here for an hour. But sitting in on Don's "CLR Type System" talk, I 
can see his standup comedy skills continue to outshine any other 
Microsoft platform proselytizers'. And in that comic vein, I'm 
looking forward to Wednesday night's reception.... no further comment!

Thanks,
   Rohit Khare
   Founder & CTO
   KnowNow, Inc.

PS. And for the rest of the fan club, Don's hair has blossomed in to 
a proud mane worth of Michael Bolton! :-)

PPS. Nice T-shirts! Classic Russian constructivist poster design. Or 
is that merely Socialist poster design? Anyway, you'll have to see 
for yourself, and yet I can't find it online at the moment. Sigh. I 
hate it when things in the real world don't have URLs. Even the d*mn 
Fruit Roll-ups in the kitchen have URLs printed on them!

=================================================
On the deep conspiracy between CLR and the DoJ, upon introducting 
Bob.SonOfBob :

"Ah yes, Fields and Methods... the foundation of  empire!

If they succeed in breaking up Microsoft, I'm going with the part 
that gets fields and methods, not the gang with delegates and 
properties!"

[I can't, however, repeat any of his comments on Bob's private 
parts... (or in VB.NET, "Private").]

On PowerPoint:

"I have this wonderful graphic diagramming a type... except... well, 
Whistler's run out of user GDI memory... so it's a really wonderful 
graphic!"

On Java:

"Which was in no way an inspiration to this technology, for any 
lawyers in the room!"

On Void:

"What does Void mean? Well, this is a C and Java void, not a C++ 
void.  Not to be confused with the closure of the overall type system 
called System.void, which you can't actually see"

("Being and Nothingness' can't hold a candle to my man Don! :-)

On tea:
"Here's is my int; here is my float!" (well, it wasn't set to music, 
but it *should* have been)

On Shared Source:
"It means, 'this has bugs, we don't want to support it, *you* fix it!'"

On Certification:
"Do not try this at home! I have been certified by the State of 
California after many years of graduate study!"

  =================================
Actual tech notes:

A runtime initalizer cannot call a member function. Is this a good or 
bad thing? I don't know.
By which he means that in C# you can't have:

public class Bob {
	public int x = g();
	int g() {return 3;}
}

public readonly int y = 23; is evaluated at runtime when decompiled 
into CLR. (Readonly is enforced after you exit the constructor; you 
can read it and write it to your heart's content while you're in the 
womb)
public const int z = 42; is evaluated at COMPILE time, and hence 
exported as a constant as well. Do NOT use if it's going to change 
from version to version -- it's TRULY const in a decentralized system 
for all time.

 From a purely philosophical perspective, I'm not sure whether this is 
a bad thing. It's rope, and you can do a lot with rope.

(1) After all, throughout the naming debates for the Web, there's 
been a wish for a truly stable constant identifier.

(2) On the other hand, using an active programming language construct 
to substitute for a naming system (module signatures, etc) seems dodgy

(3) and I still can't see why we'd move a lexical substitution like 
#DEFINE z 32 into the language runtime, but then, it makes hacking 
the binary much easier :-)

(4) and I'm sure there are reflective reasons, that deep within the 
bowels of the kernel and driver code we'd need this base covered, in 
case someone does want to write an OS in C#.

So, once again, I end up on the libertarian side of handing out rope 
with big orange warning labels and subsidizing tort lawyers :-)

Another point on namespaces. In Java, the com.sun.foo stuff was both 
used as a disambiguator of foos AND an encapsulator for packaging 
instances. The Namespace /Using  statement pair in C# is just 
syntactic sugar, allowing you to use a domain name or any other 
string to label a module. Sounds a lot like XML namespace philosophy, 
but I bet it has its roots in the limbic brain, thinking "Urg, Ooga 
must replace #INCLUDE standard pathnames. Urg, me replace silly 
#IFNDEF __included_already_p__ with "Namespace already"!"

JavaBeans use a casual heuristic for getters and sitters. If you ever 
mention a variable foo, say "if (obj.foo < 3)" then getFoo will be 
called, if you've written one. But, in CLR, you have to explicitly 
identify the getter or setter function name to make something a 
"property". You can also have indexers, that grab any array-like 
reference on read or write and let you intercept it.   Consider the 
difference between bob["patient"]  or bob.patientID ...

public object this[string name] {
    get {
        switch (name) {
              case "id": return calculated_patient_id;
	...