Every software should have backward compatibility (at least some sense of it), this ensures old codes can run in the future updated systems without any problems in most situations. But why did the Python team decide to make the v3 a new language? The community has to split up into two and every computer has to install both v2 and v3 in order to run every python code. This is a huge mess. Is there a computer science reason behind this decision?


closed as off-topic by Pseudonym, Evil, David Richerby, Juho, cody Jul 28 '16 at 1:53

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "This question does not appear to be about computer science, within the scope defined in the help center." – Pseudonym, Evil, David Richerby, Juho, cody
If this question can be reworded to fit the rules in the help center, please edit the question.

  • 5
    $\begingroup$ Welcome to Computer Science! Your question is off-topic here: we deal with computer science questions, not questions about how programming language projects are managed (see our FAQ). Your question might be on-topic on Stack Overflow. $\endgroup$ – Pseudonym Jul 26 '16 at 0:38
  • 2
    $\begingroup$ Having said that, there is one thing that could be interpreted as a computer science question: "Is there a computer science reason behind this decision?" The answer is "no". There is no theoretical reason why you couldn't have a single implementation which supports distinct but related languages working together in some sense of "together" (consider Clang, which supports C, C++, and Objective-C). There may be practical reasons why this is a bad idea. $\endgroup$ – Pseudonym Jul 26 '16 at 0:53
  • $\begingroup$ Because this question is about "release management" (releases 2.x vs. release 3.0), perhaps this question would be more on-topic at softwareengineering.stackexchange.com . $\endgroup$ – David Cary May 12 at 22:40

The saying goes, "In C++11, 11 is the number of legs the stapled onto the dog to make a better octopus".

As with basically everything in Computer Science, this is all about tradeoffs.

If you focus on backwards compatibility, you have potentially conflicting features interacting with each other. You're stuck with the design choices that were initially made, when you didn't have the knowledge and data that years of production use provide.

Breaking changes, conversely, have the disadvantage of breaking old code, though with Python 2, usually files could be converted mechanically.

Now, there are also questions of "what makes a language?"

From a semantics point of view, every time you add a new feature to a language, you have effectively defined a new language with different semantics. There are nice formalisms for dealing with this: for example, some extensions to languages are conservative, meaning you're only expressing features that the start language could express.

Python 2 to 3 was not an extension, let alone a conservative one. So from a theory point of view, they're different languages, that happen to share a name, most syntax, and a real-life community.

Java broke backwards compatability when they decided to be a different language from C++ or SmallTalk or Eiffel. At the end of the day, the lines between languages and dialects and versions can be blurry, and the decision will come down to what is viewed as the most pragmatic for developers.


Not the answer you're looking for? Browse other questions tagged or ask your own question.