Возник такой вопрос. Допустим, есть выражение
fu=function(x){exit}
fu(long_calculation())
Пример, конечно, надуманный, но там может быть ветвление, например, с анологичным эффектом, и еще множество вариантов.
Будет ли компилятор производить подстановку икса? Ведь чтобы узнать используется ли x он должен сначала зайти внутрь выражения, и, в общем случае не ясно, что дешевле, узнавать, используются ли выражения в телах функций или вычислять их сразу. Для чисто компилируемых ЯП этот вопрос не стоит, время компиляции не важно, как считается. Но в динамических языках время компиляции и перекомпиляции входит во время ожидания пользователя, насколько я понимаю.
Если у нас чистый интерпретатор с поздним связыванием, то, насколько я понимаю, выражение вычисляться не будет, пока оно не потребуется. Такая стратегия вычислений уже сама по себе является заменой любым оптимизациям, поскольку программисту ясно, где что вычислять. Может быть компиляция в динамических ЯП приносит вместо ожидаемого ускорения тормоза?
UPD проверил в JS сейчас, вычисления происходят.