Types, Makers, and Inheritanc

Mark S. Miller markm@erights.org
Wed, 11 Nov 1998 13:41:20 -0800


At 09:53 PM 10/20/98 , Tyler Close wrote:
>At 05:31 PM 10/20/98 -0700, you wrote:
>>On Tue, 20 Oct 1998, Tyler Close wrote:
>>> I don't see how it's necessary to have Type objects in order to have an
>>> interface to an instance object. In C++, I never had a need or desire for
>>> Type objects.
>>
>>That's because the C++ compiler checks types for you.  In a
>>dynamically-typed language like E (or Python, etc.) it's useful
>>to be able to check and compare the types of things at runtime.
>
>Well, I have to admit that I haven't done a lot of work in untyped
>languages, but I wasn't expecting to change my designs all that much. I
>don't see why I should allow my program to loose track of what kind of
>objects it's dealing with just because the compiler is no longer doing
>static type checking.

[+] You are correct, 
but please see my gui-enhanced command interpreter for a motivating example.


>Are you really suggesting that you want to do stuff like:
>
>if(x getType isa Foo)
>{
>	# do a Foo thing
>}
>else if(x getType isa Bar)
>{
>	# do a Bar thing
>}
>else
>	...
>
>This seems like crappy design to me.

[+] This is an excellent heuristic, but it does have justified exceptions.  
It is also independent of whether you have static type checking.  I
occasionally find a justified use of the equivalent pattern in Java (using
instanceof).  When you control all the code in a system, then any dispatch
like the above can (and usually should) be turned instead into methods on
class Foo and Bar.  However, especially in a distributed system of mutually
suspicious players, you often aren't in a position to change Foo and Bar.