動的型付け言語でも多くは動的型付けの利点は利用していない、利用していない場所はコンパイラー側から見れば判る。
a = 10;
func1(a);
a = "ABC";
func2(a);
オプティマイズをするコンパイラーならfunc1を抜けた時点で a は別の入れ物になる。どちらのaもint/stringで型は静的に決定する。
もっと深くても、例えば動的にフィールドやメソッドが追加されるようなオブジェクトでも、大抵は静的に決定しましまう事が多い。
型は大半コンパイラーには推論できてしまうんだ、僅かな例外が真の動的型付け的機能を必要としている。