What is a type error?

Chris Smith cdsmith at twu.net
Mon Jun 26 19:49:51 CEST 2006

Pascal Costanza <pc at p-cos.net> wrote:
> Consider division by zero: appropriate arguments for division are 
> numbers, including the zero. The dynamic type check will typically not 
> check whether the second argument is zero, but will count on the fact 
> that the processor will raise an exception one level deeper.

Of course zero is not appropriate as a second argument to the division 
operator!  I can't possibly see how you could claim that it is.  The 
only reasonable statement worth making is that there doesn't exist a 
type system in widespread use that is capable of checking this.

> This is maybe better understandable in user-level code. Consider the 
> following class definition:
> class Person {
>    String name;
>    int age;
>    void buyPorn() {
>     if (< this.age 18) throw new AgeRestrictionException();
>     ...
>    }
> }
> The message p.buyPorn() is a perfectly valid message send and will pass 
> both static and dynamic type tests (given p is of type Person in the 
> static case).

It appears you've written the code above to assume that the type system 
can't cerify that age >= 18... otherwise, the if statement would not 
make sense.  It also looks like Java, in which the type system is indeed 
not powerfule enough to do that check statically.  However, it sounds as 
if you're claiming that it wouldn't be possible for the type system to 
do this?  If so, that's not correct.  If such a thing were checked at 
compile-time by a static type check, then failing to actually provide 
that guarantee would be a type error, and the compiler would tell you 

Whether you'd choose to call an equivalent runtime check a "dynamic type 
check" is a different matter, and highlights the fact that again there's 
something fundamentally different about the definition of a "type" in 
the static and dynamic sense.

Chris Smith - Lead Software Developer / Technical Trainer
MindIQ Corporation

More information about the Python-list mailing list