強い/弱いタイピングと静的/動的なタイピングは直交しています。
強い/弱いとは、機能的に言えば、値のタイプが重要かどうかです。弱い型付けの言語では、たまたま数字で埋められた2つの文字列を取得し、整数の加算を実行できます。厳密に型指定された言語では、これはエラーです(最初に値を正しい型にキャストまたは変換しない限り)。強い/弱いタイピングは白黒のものではありません。ほとんどの言語は100%厳密でも100%脆弱でもありません。
静的/動的型付けは、型が値にバインドするか識別子にバインドするかに関するものです。動的に型指定された言語では、型に関係なく、任意の変数に任意の値を割り当てることができます。静的型付けはすべての識別子の型を定義し、異なる型からの割り当てはエラーであるか、暗黙的なキャストになります。一部の言語は、静的に宣言された型と型なし識別子(「バリアント」)を可能にするハイブリッドアプローチを採用しています。型推論もあります。これは、すべての型を明示的に宣言せずに静的型付けを可能にするメカニズムです。コンパイラに型を認識させることにより、Haskellはこれを広範囲に使用しvar
ます。
弱い動的プログラミングでは、実用的なアプローチが可能です。ほとんどの場合、言語はあなたの邪魔になりませんが、自分自身を足で撃っているときにも介入しません。対照的に、強力な静的型付けは、コンパイラーまたはインタープリターがエラーのクラスを検出できるように、コード内の値に関する特定の期待をプログラマーに明示的に表現させます。優れたタイプシステムを使用すると、プログラマーは値に対して実行できることとできないことを正確に定義できます。偶然に誰かが望ましくない何かを試みた場合、タイプシステムはそれを防止し、どこで何が間違っているのかを正確に示すことができます。