Strong vs Weak Typing
Strong typing: (static and usually monomorphic)
Every variable must have a type.
A variable may receive only values of its type.
Type-related bugs can be reduced.
Type identification tags are not needed a run time.
Weak typing: (dynamic and usually polymorphic)
Variables need not be declared with particular types.
The type of value held by a variable can change dynamically.
Values must be tagged during execution with their types.