Bob Hutchison <hutch / recursive.ca> wrote in message 
> Strong static typing does not necessitate type
> annotations (except at the time of their creation I suppose) -- and I have
> no idea how, in practice, this is distinguishable from a strong dynamic
> language in any sense that could matter.

In the sense that it requires whole-program, or at least whole-module,
compilation - the type of incremental, run-time compilation seen in,
eg, Smalltalk is quite hard in a static language (IBM did it to some
degree in VAJ), and essentially impossible, I would imagine, with type
inferencing - change a single function or type and you have to
re-evaluate everything it touches.

I'll also point out my favorite feature of dynamic, message-passing
languages: the doesNotUnderstand handler in Smalltalk, or
method_missing in Ruby, which makes distributed object systems,
transparent persistency, etc, much much simpler to implement.  It's
also completely inconsistent with any form of static type checking.

Cheers,
Avi