[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: cheerful static typing (was: Any and Every... (was: Eval))

Zooko <zooko@zooko.com> writes:

> Greetings, ll1-discuss!
> I've greatly enjoyed reading this list so far.  Thanks!
> The discussion about `any' and `every' has got me thinking about something.  
> Static type-checkers typically act "pessimistically".  That is: a typical static 
> type-checker rejects code which might be correct, but which it can't statically
> prove to be correct.  For example, suppose there is a function `f' statically 
> declared to return an integer, and a function `g' statically declared to take
> an *even* integer, then a static type-checker would reject `g(f())' as possibly
> incorrect.  (Assuming of course that such things were part of the type system.)
> I am thinking of "optimistic" or "cheerful" static type-checkers which accept 
> code that is of uncertain safety, while rejecting code that is statically proven 
> to be incorrect.  For example, a cheerful type-checker would accept `g(f())' 
> (possibly while emitting a warning), but if function `h' accepts only odd-
> integer arguments, then it would reject `h(f())'.

This is what I meant by having to address the definition of
`checking'.  I'm sure that someone in the static type camp would
suggest that you need *not* refuse to execute a program that the type
checker could not prove correct.  (I'm equally sure that someone in
the static type checking camp will suggest that such a thing may not
technically a program!)