This article demonstrates that dynamic compilation maintains the language's semantics while static compilation often doesn't. Also shows why this matters and offers a bit of code to help you determine whether your just-in-time (JIT) compiler can transform tail recursion on code while preserving semantics.