[Python-ideas] The case against static type checking, in detail (long)

Tony Lownds tony at PageDNA.com
Thu Apr 26 21:39:39 CEST 2007


On Apr 25, 2007, at 10:59 PM, Talin wrote:
> However, we find in practice that much of the programmer's effort is
> spent in maintaining this cross-checking structure.

How does this effort compare to writing all of the equivalent type  
tests?
Static type checking subsumes the need to write tests to ensure that for
every operation, the inputs are valid types, and the result type will  
be a
valid type.

> To use a building
> analogy, a statically-typed program is like a truss structure, where
> there's a complex web of cross-braces, and a force applied at any  
> given
> point is spread out over the whole structure. Each time such a program
> is modified, the programmer must partially dismantle and then
> re-assemble the existing structure.

However the work to ensure the re-assembled structure is completely  
valid
is shifted from human inspection and possibly incomplete tests, to  
static analysis.
Its like having a computer check all of the cross brace connections.   
When the
modifications are small dismantle/reassmbly costs can be dominated by
the checking costs.

> Yes, static type checking
> does detect some errors; But it also causes errors by making the code
> larger and more wordy, because that the programmer cannot hold large
> portions of the program in their mind all at once, which can lead to
> errors in overall design. It means the programmer spends more time
> thinking about the behavior of individual variables and less about the
> algorithm as a whole.

Thats like saying stairs should not have rails because thinking about  
where
to put your hand gets in the way of thinking about where to put your  
feet!

Proposals for static type checking in Python have long included the  
concept of
optional type checking where programs without declarations continue  
to run. So
clearly the desire not to clutter or force work on a type-declaration  
averse programmer
is already taken as a requirement.

-Tony




More information about the Python-ideas mailing list