I can only think of 2: python 3 and perl 6.
Those two were very traumatic so it's not surprising it feels like more.
I can only think of 2: python 3 and perl 6.
Those two were very traumatic so it's not surprising it feels like more.
While C#, F#, VB and C++/CLI were kept compatible, it doesn't help when the library stuff you want to call isnt' there any longer.
C++ removal of exception specifiers, GC API,
C VLAs got dropped in C11, function prototypes changed meaning in C23, and K&R declarations were dropped from the standard.
Java, already someone else mentioned.
D, the whole D1 => D2 transition, and Tango vs Phobos drama.
Bit of a quibble but I'm not sure I'd call that a "huge breaking change" given that that feature wasn't really implemented in the first place, let alone actually used.
https://cppreference.com/w/cpp/compiler_support/11.html
It was a bad feature, as the two main C++ commercial products that make use of GC, namely C++/CLI and Unreal C++, were never taken into account while designing it, a good example how WG21 often does PDF driven design.
Not so sure I'd call these huge breaking changes. They're breaking, sure, but I'd expect them to be trivial to fix in any existing codebase.
Maybe VLAs are a huge breaking change? Most code never used it due to no way at all to use them safely, so while it is a pain to replace all occurrences of them, the number of usages should be really low.
https://www.phoronix.com/news/Linux-Kills-The-VLA
Breaking changes are breaking changes, even if it is only fixing a comma, someone has to spend part of their time making it compile again, which many times maps to actual money for people working at a company, their salary mapped into hours.
No disagreement there, but the context ITT was specifically about huge breaking changes. I consider those breaking changes, but not necessarily huge ones.
It’s certainly a case that languages need to be championed by competent IDE writers otherwise they fail to scale. Because you can’t have 50 devs all using neovim - and only neovim - without making a huge gigantic mess. Large projects can sustain a few brilliant people working with one hand tied behind their back but not everyone.
I tried few times checking on it, but I failed to find something that motivated me to continue
But as I said above, I realized long ago that languages without IDEs by and large falter in the long term (that's why I'm currently concerned about Jetbrains needing a buggy plugin to do Elixir), so Jetbrains being behind it added a lot of gravitas.
And after fighting with Larry Ellison for a bit, Android phones moved to Kotlin to get around the lawyers.
The issue for me is that Scala design lacks focus. They say yes to too many features.
See all platforms that have their identity tied with a specific language, the platform's language always has a guaranteed future as long as the platform continues to be industry relevant.
The others on top, come and go.
Full of Least Surprise violations, and just far too goddamned big. Did 3 try to pare that back into something reasonable?
Also breaking changes do happen, see list of removed methods
https://docs.oracle.com/en/java/javase/17/migrate/removed-ap...
On paper, it really was just a few changes. In practice, it forced a massive transitive dependency and technical debt cleanup for many companies.
Typescript has introduced breaking changes but they're not that bad
There was a rails upgrade around that time that was similarly painful, at least in the humongous rails app I was working in.
This caused quite a lot of work on the apps I worked on.
Ruby 1.8 to 1.9 was a major version change in the semver sense; Ruby wasn't using Semver before, IIRC, 2.1.0, it was using a scheme that was basically loosely like Semver with an extra prefix number. Ruby minor versions were equivalent semver major (and also had a less-stable implication for odd numbers, more stable for even, Ruby “tiny” versions were equivalent to semver minor, and Ruby still had patch versions.