Context ( You can skip )
I will be doing a presentation on Python, and will be touching upon V3's decision to be intentionally backwards incompatible, and how that has affected Python long term. I will be examining in particular their decision to remove the print
keyword, because it was a decision that was not strictly neccessary. [ as far as I know ]
However, in order to be fair to the language, I wish to examine where C and C++ have done similar in their past, where they intentionally released a spec that when implimented, would definitely break existing code. I had tried asking around about this, and really only found one particular instance:
Why exactly was the C++ convenience of not requiring a second declaration, removed?
However it seems so esoteric of an example that it can hardly be considered relevant. I get the impression that breakages are actually quite frequent upon every C++ release, it is just not clear to me whether those breakages are bugs/oversights, or rather intentional breakages/deprecations introduced into the spec.
Actual Question:
Regarding C or C++
- What is an instance where a change was introduced to the spec, that would knowingly break backwards compatibility?
- [ To be clear, where old code ceases to be valid or compileable under an updated specification ]
Optional Details of Interest:
- What was the rationalization for this change?
- Was it absolutely neccessary?
- How did compilers generally handle the change?
- For example, were compatibility flags introduced? Were compiler warnings added before the change was finally implimented?
- Were there any significant negative externalities which resulted from this change?
- For example, years long endeavours to bring a large library up to spec?
- In hindsight, was the decision made ultimately the best one, or were those involved in the change, express any sort of regret?
- Python for example seems to generally lament how it handled its upgrade to V3. https://python3statement.org/
Thank you.