A distinction we will see throughout the term is between the following:
A statically typed language requires the programmer to declare
a type for each variable. The validity of a message passing expression
will be checked at compile time, based on the declared type of the
A dynamically typed language associates types with values,
not with variables. A variable is just a name.
The legality of a message cannot be determined until run-time.