Also, note that static and dynamic typing are not mutually exclusive (dynamic typing with optional static annotations is one very practical point in the continuum; inferred (i.e., few to no annotations) static typing is another), and static/dynamic typing are distinct from strong & weak typing. C is semi-weakly typed, because you can fake out the type system easily with casts.
Basically, static vs dynamic is about how early types can be decided, strong vs. weak is about how strictly they're enforced. People have been mixing the terms up for a while though, even in type system papers, which adds lots of confusion.
Comments
Also, note that static and dynamic typing are not mutually exclusive (dynamic typing with optional static annotations is one very practical point in the continuum; inferred (i.e., few to no annotations) static typing is another), and static/dynamic typing are distinct from strong & weak typing. C is semi-weakly typed, because you can fake out the type system easily with casts.
Basically, static vs dynamic is about how early types can be decided, strong vs. weak is about how strictly they're enforced. People have been mixing the terms up for a while though, even in type system papers, which adds lots of confusion.
For a really good tour of language design issues, check out CTM (http://www.info.ucl.ac.be/~pvr/book.html) or EoPL (http://www.cs.indiana.edu/eip/eopl.htm). I've also heard good things about PLP (http://www.cs.rochester.edu/~scott/pragmatics/), but haven't read it yet.