Comment by 0cf8612b2e1e

5 days ago

The Python C api leaks its guts. Too much of the internal representation was made available for extensions and now basically any change would be guaranteed to break backwards compatibility with something.

It's a shame that Python 2->3 transition was so painful, because Python could use a few more clean breaks with the past.

This would be a potential case for a new major version number.

  • On the other hand, taking backwards compatibility so seriously is a big part of the massive success of Python

    • >> Python 2->3 transition

      > taking backwards compatibility so seriously

      Python’s backward compatibility story still isn’t great compared to things like the Go 1.x compatibility promise, and languages with formal specs like JS and C.

      The Python devs still make breaking changes, they’ve just learned not to update the major version number when they do so.

      1 reply →

    • I would argue that the libraries, and specifically NumPy, are the reason Python is still in the picture today.

      It will be interesting to see, moving forward, what languages survive. A 15% perf increase seems nice, until you realize that you get a 10x increase porting to Rust (and the AI does it for you).

      Maybe library use/popularity is somewhat related to backwards compatibility.

      Disclaimer: I teach Python for a living.

      4 replies →

    • Python does not take backwards compatibility very seriously at all. Take a look at all the deprecated APIs.

      I would say it's probably worth it to clean up all the junk that Python has accumulated... But it's definitely not very high up the list of languages in terms of backwards compatibility. In fact I'm struggling to think of other languages that are worse. Typescript probably? Certainly Go, C++ and Rust are significantly better.

      1 reply →

    • Python does not take backwards compatibility seriously. 2 to 3 is a big compatibility break. But things like `map(None, seq1, seq2)` also broke; such deliberate compatibility break is motivated by no more than aesthetic purity.

Ooo this makes sense it's like if the Linux had don't break users space AND a whole bunch of other purely internal APIs you also can't refactor.