|
|
|
|
|
by dataflow
490 days ago
|
|
This will get a bit pedantic, but it's probably worthwhile... so here we go. > Is this an optimisation or a change in program semantics? Note that I specifically said something can be both an optimization and a change in semantics. It's not either-or. However, it all depends on how the program semantics are defined. They are defined by the language specifications. Which means that in your example, it's by definition not a semantic change, because it occurs under the as-if rule, which says that optimizations are allowed as long as they don't affect program semantics. In fact, I'm not sure it's even possible to write a program that would be guaranteed to distinguish them based purely on the language standard. Whereas with tail recursion it's trivial to write a program that will crash without tail recursion but run arbitrarily long with it. We do have at least one optimization that is permitted despite being prohibited by the as-if rule: return-value optimization (RVO). People certainly consider that a change in semantics, as well as an optimization. |
|
With this kind of "benign" change, all programs that worked before still work, and some that didn't work before now work. I would argue this is a good thing.