Compilers for
LazyLanguages use
StrictnessAnalysis to discover those portions of the code that must be executed, and implements this code using
StrictEvaluation, avoiding the overhead with closure creation that is necessary to
LazyEvaluation.
Naturally one has to be careful about side effects. Since you're changing the order of evaluation you may change the order of side effects. Since is a major reason why
LazyLanguages don't have side effects.