Darren New wrote: [me:] > > Personally, I would be quite happy to go there -- I dislike the idea > > that a value has a specific inherent type. > > Interestingly, Ada defines a type as a collection of values. It works > quite well, when one consistantly applies the definition.
I have never been very happy with relating type to sets of values (objects, whatever). I'm not saying that it's formally wrong (but see below), but it doesn't fit with my intuitions very well -- most noticeably in that the sets are generally unbounded so you have to ask where the (intentional) definitions come from. Two other notions of what "type" means might be interesting, both come from attempts to create type-inference mechanisms for Smalltalk or related languages. Clearly one can't use the set-of-values approach for these purposes ;-) One approach takes "type" to mean "set of classes" the other takes a finer-grained approach and takes it to mean "set of selectors" (where "selector" is Smalltalk for "name of a method" -- or, more accurately, name of a message). But I would rather leave the question of what a type "is" open, and consider that to be merely part of the type system. For instance the hypothetical nullability analysis type system I mentioned might have only three types NULLABLE, ALWAYSNULL, and NEVERNULL. It's worth noting, too, that (in some sense) the type of an object can change over time[*]. That can be handled readily (if not perfectly) in the informal internal type system(s) which programmers run in their heads (pace the very sensible post by Anton van Straaten today in this thread -- several branches away), but cannot be handled by a type system based on sets-of-values (and is also a counter-example to the idea that "the" dynamic type of an object/value can be identified with its tag). ([*] if the set of operations in which it can legitimately partake changes. That can happen explicitly in Smalltalk (using DNU proxies for instance if the proxied object changes, or even using #becomeA:), but can happen anyway in less "free" languages -- the State Pattern for instance, or even (arguably) in the difference between an empty list and a non-empty list). -- chris -- http://mail.python.org/mailman/listinfo/python-list