私も同じことを疑問に思いました。私はコンパイラー/インタープリターのライターではありませんが、完璧にするのは不可能だというのが答えになると思います。ただし、ほとんどの場合、正しく取得できます。
まず、「動的」言語という名前を「解釈された」言語に変更します。これは、Ruby や Javascript などで私が考えるものです。解釈される言語は、実行時の機能を利用する傾向があります。
たとえば、ほとんどのスクリプト言語では次のことが可能です。
-- pseudo-code but you get the idea
eval("echo(a)");
文字列を「実行」しただけです。その文字列もリファクタリングする必要があります。また、a は変数になりますか、それとも変数 a がない場合、この言語では文字 a を引用符なしで出力できますか?
この種のコーディングはおそらく例外であり、ほぼ常に適切なリファクタリングが得られると信じたい. 残念ながら、スクリプト言語のライブラリを調べてみると、通常はそのような例外が発生し、アーキテクチャがそれらに基づいている可能性さえあるようです。
または、アンティを少し上げるには:
def functionThatAssumesInputWillCreateX(input)
eval(input)
echo(x)
def functionWithUnknownParms( ... )
eval(argv[1]);
少なくとも Java をリファクタリングし、変数を int から string に変更すると、int を想定していたすべての場所でエラーが発生します。
String wasInt;
out = 3 + wasInt;
インタープリター言語では、実行時までこれが表示されない可能性があります。