Я удивлялся тому же. Я не пишу компилятор / интерпретатор, но я думаю, что ответом будет то, что невозможно сделать его идеальным. Тем не менее, вы можете сделать это правильно в большинстве случаев.
Во-первых, я собираюсь изменить название «динамический» язык на «интерпретируемый» язык, о котором я думаю в Ruby, Javascript и т. Д. Интерпретируемые языки, как правило, используют преимущества возможностей времени выполнения.
Например, большинство языков сценариев допускают следующее
-- pseudo-code but you get the idea
eval("echo(a)");
Я просто "запустил" строку! Вы должны также рефакторинг этой строки. И будет ли переменная или этот язык позволяет печатать символ а без кавычек, если нет переменной а?
Я хочу верить, что этот вид кодирования, вероятно, является исключением, и вы будете получать хороший рефакторинг почти все время. К сожалению, кажется, что когда я просматриваю библиотеки для языков сценариев, они обычно попадают в такие исключения и, возможно, даже основывают свою архитектуру на них.
Или немного поднять ставку:
def functionThatAssumesInputWillCreateX(input)
eval(input)
echo(x)
def functionWithUnknownParms( ... )
eval(argv[1]);
По крайней мере, когда вы реорганизуете Java и изменяете переменную с int на строку, вы получаете ошибки во всех местах, которые ожидали int еще:
String wasInt;
out = 3 + wasInt;
С интерпретированными языками вы, вероятно, не увидите этого до времени выполнения.