Pascal Bourguignon wrote: > Pascal Costanza <[EMAIL PROTECTED]> writes: >>Andreas Rossberg wrote: >>>Pascal Costanza wrote: >>> >>>>Consider a simple expression like 'a + b': In a dynamically typed >>>>language, all I need to have in mind is that the program will >>>>attempt to add two numbers. In a statically typed language, I >>>>additionally need to know that there must a guarantee that a and b >>>>will always hold numbers. >>> >>>I'm confused. Are you telling that you just write a+b in your >>>programs without trying to ensure that a and b are in fact numbers?? >> >>Basically, yes. >> >>Note that this is a simplistic example. Consider, instead, sending a >>message to an object, or calling a generic function, without ensuring >>that there will be applicable methods for all possible cases. When I >>get a "message not understood" exception, I can then decide whether >>that kind of object shouldn't be a receiver in the first place, or >>else whether I should define an appropriate method. I don't want to be >>forced to decide this upfront, because either I don't want to be >>bothered, or maybe I simply can't because I don't understand the >>domain well enough yet, or maybe I want to keep a hook to be able to >>update the program appropriately while it is running. > > Moreover, a good proportion of the program and a good number of > algorithms don't even need to know the type of the objects they > manipulate. > > For example, sort doesn't need to know what type the objects it sorts > are. It only needs to be given a function that is able to compare the > objects.
But this is true also in a statically typed language with parametric polymorphism. [...] > Why should adding a few functions or methods, and providing input > values of a new type be rejected from a statically checked point of > view by a compiled program that would be mostly bit-for-bit the same > with or without this new type? It usually wouldn't be -- adding methods in a typical statically typed OO language is unlikely to cause type errors (unless there is a naming conflict, in some cases). Nor would adding new types or new functions. (*Using* new methods without declaring them would cause an error, yes.) -- David Hopwood <[EMAIL PROTECTED]> -- http://mail.python.org/mailman/listinfo/python-list