So scoff all you want, but Python 2.x isn't going away that soon.
In the Java world (conservative and slow-moving) JRE 7 (2011) is considered the absolute minimum, and if you're not targeting JRE 8 (2014) you have to have a very good reason.
You mean like, dealing with strings and Unicode? That's usually the case why people have trouble migrating to Python 3.
- There is a community that wants it (largely enterprise).
- The Python team does not want it.
A less controversial word is deprecated - the Python team is discouraging use of Python 2, but not prohibiting it's use or development. That's fair, and if you read this page:
https://wiki.python.org/moin/Python2orPython3
they are not very opinionated about it, largely saying "Use 3, unless you can't, then use 2 and start trying to migrate, unless you can't, then just use 2."
I will say, not to give somebody a bad day but, 2.8 seems like a bad idea. Currently python's development has still largely been a straight line, which is good for transitioning, but 2.8 would cause a fork. It would give a lot of people a short-term win for a long-term lose. Better not to tempt people.
Like you said, Python team sees the 3.x series as the successor AND as a replacement for Python 2.x. They were never meant to exist one beside the other (or, there was no thought put into this before the release).
From my perspective, giving people the choice between 2 or 3 will only give us problems down the road, which is why I vehemently discourage it.
I wonder what about this made this difficult. Was it because it's a language interpreter? Libraries have this problem sometimes, but not as much. (I never hear of issues with gstreamer between 0.10 and 1.0, for example.) Maybe it was just that a binary called python existed? Maybe we should have just said "screw it, python means python2, end of story."
Don't know. What would you have preferred?
In my field what seemed to keep people on python 2 for a long time was numpy or scipy (or both, I do not remember which) which did not get a 3 upgrade for a long time.
Either that, or just call it something different, kind of like perl6. There is no perl6 distribution shipping a perl library or some perl.dll that clashes with perl5.
Regarding adoption, it's 3.0 that's obsolete, and 2.7 that's vibrant. Even for new code (they conveniently only count totally greenfield projects, but most new code is written in fact to work with established 2.x codebases under Python 2, not as a totally greenfield project).
What numbers? All the numbers I've seen -- official numbers from PyPY etc) tell otherwise.
Also, your anecdotal data is arguably biased as well.
My take is that many sources, including the ones linked to in the tweet's replies point to solid growth in Python 3 adoption. Python3 might not have overtaken Python 2 overall, but it's very far from being "dead".
I wasn't making the point that Python 2 is dead, in fact quite the opposite. I'm saying that with this many users the adoption rate is too slow. There is no real reason for people to switch. Until there is that incentive Python 2 will not die.
No, I asked for a representative data source (representative was implied: a biased data source is as good as no data source at all).
Downvoting because Python 2 is anything but obsolete. People still love using it.
The fact that people love and use something doesn't mean it cannot be obsolete.
At work, I care about more than 35 years old software. It is obsolete (it's written in mainframe SAS with 3270 green screens and some assembly), but people still love using it, mainly because there is no good alternative and it does the job very well.
For reference, Oxford dictionaries define (..."define"? are multiple dictionaries involved here?) "obsolete" as:
1. no longer produced or used; out of date.
Clearly Python 2.7 is in widespread use, and version 2.7.12 came out just a few months ago, so it's neither "no longer produced" nor "no longer used" nor "out of date"...
I mean look at other things. You can still program in C 89 or FORTRAN 77 or COBOL 74 (and no doubt there is somebody still supporting compilers and runtimes for those), but they are all obsolete standards.
Addendum: I think for standards like programming language semantics (which in case of Python is directly embodied in the C implementation), "obsolete" means there is a new standard by some official body (say, the developer of the old standard) that addresses shortcomings of the old standard. So "out of date" is the fitting equivalent of "obsolete" from the Oxford definition.
Really? So even if no one ever uses it, it still renders the old one obsolete?!
This is a strawman, because I don't think this ever happens (feel free to give an example). There will always be people who try to use new standard; they may abandon it later, but they will at least try to use it.
In any case, this is not really relevant to Python 3, which is used plenty and more and more every day.
And your insistence that Python 2.7 is not dead really reminds me of this sketch: https://www.youtube.com/watch?v=npjOSLCR2hE
> This is a strawman, because I don't think this ever happens (feel free to give an example). There will always be people who try to use new standard; they may abandon it later, but they will at least try to use it.
...I thought it was obvious I didn't mean the case where literally NO ONE was using it, but apparently it wasn't. Sorry. My point was, if it doesn't catch on, then does it still render what came before it obsolete? Is it only about time and whether it fixes some things from before? Not about whether it's actually used, or whether it introduces other problems, or whether the previous technology is still in widespread use, or a million other factors? Really?
As for Python 3 being used and more every day, yes, I never claimed it was obsolete or dead or anything else. I'm just saying Python 2.7 is being used too, and hence it's not obsolete either as you seem to think. You claimed it was, so I asked for your definition of the term. You're rejecting the standard one and you still haven't given me one that you're willing to apply to things other than Python. Not to mention I don't see why software deserves special treatment for the word's definition here.
I already gave you a definition of what it means to be obsolete for standards (such as specifications of programming languages).
In general, an old standard will become obsolete once the new standard (that is supposed to replace it) is finalized (for example, in RFCs, they explicitly say that). At that point, there are probably no serious users of the new standard yet, so the actual usage doesn't matter.
Of course a standard can be de facto rejected by people abandoning it instead of accepting it. Then usually there will either be another standard that obsoletes the old one again (as was a case with XHTML and HTML 5), or people will move on entirely to something else; in either case, the old standard will remain obsolete.
Just so you know.
How in the world was my definition "arbitrarily-chosen"? I literally chose definition #1 on Oxford English dictionaries. That's arbitrary?!
The situation with C89 and Fortran 77 is completely different than what you see today with Python 2 vs Python 3. For 99.9999% of C89 and Fortran 77 code you can build the old code with new C and Fortran compilers and use it from today's standards. You can take a piece of code written 30 years ago, recompile it and it usually works.
I am pretty sure there is theoretical way to run Python 2 code alongside Python 3 code, but they simply decided it's not worth the effort.
Edit: I think historically Python 2/3 divide is more akin to Maclisp/Common Lisp divide, but in the latter, the situation was even more complicated. But I doubt you can just take Maclisp code and run it on Common Lisp implementation, despite that fact that it was meant as a successor.
That's just what the lead project team declared. Not what the user base asked for or wants.
>You can still program in C 89 or FORTRAN 77 or COBOL 74 (and no doubt there is somebody still supporting compilers and runtimes for those), but they are all obsolete standards.
That's because people stopped using them organically. That's not the case with Python 2 -- Python 3 was declared "the new hotness" with a decree from above.
It's like as if the W3C comes out with some incompatible HTML NG on their own and says that HMTL 5 is "end of line", giving billions of webpages the middle finger.
Even worse, it's also as if HTML NG only had some marginal improvements over HTML 5, and was otherwise the same.
You think they are doing it just for kicks? There are no issues with Python 2? They are also part of the user base, and they did it for a reason.
> That's because people stopped using them organically. That's not the case with Python 2 -- Python 3 was declared "the new hotness" with a decree from above.
Well, I for instance stopped using Python 2 when Python 3 came out, if it was possible for me to do so (I had all the libraries I needed). I understand that many people can't do it, but people are organically moving from Python 2 to Python 3, not the other way around.
Nobody is really forcing you to not use Python 2, just as nobody is forcing you not to use FORTRAN 77 or COBOL 74. It's just that the language will not evolve anymore, and as far as runtime goes, you will be on your own eventually.
> It's like as if the W3C comes out with some incompatible HTML NG on their own and says that HMTL 5 is "end of line", giving billions of webpages the middle finger.
I think I already addressed this in my other comments.
Yes. From a false sense of "we know better than you what's good for you". And also from not being connected to actual business and end user needs.
>There are no issues with Python 2?
That's irrelevant. There are issues with Python 3. Besides, the issues that Python 3 fixed over 2 are marginal at best and most could be retroffited to 2.x (as this 2.8 release proves). Nothing earth shattering to make the transition worth it.
>Nobody is really forcing you to not use Python 2, just as nobody is forcing you not to use FORTRAN 77 or COBOL 74. It's just that the language will not evolve anymore, and as far as runtime goes, you will be on your own eventually.
It's more likely that Python will suffer from people moving to other languages (and already, first Rails and then JS have won the server side over Python big time, and JS looks poised to be more general use too), than that anything good will comes out of this "you're free to use 2.x, it just wont be updated anymore".
I am not really personally bothered by Python 3 being incompatible (with that one Jython exception that I already mentioned). But I would like to point out the comment https://news.ycombinator.com/item?id=13146127, I think you're the one who is wrong here.
> It's more likely that Python will suffer from people moving to other languages
Unlikely. Rails are probably going out of fashion. Javascript is a terrible language, which only saving grace is a decent support in browsers. I am not sure for what other reason, choosing a language today, I would choose Javascript over Python 3.
So people moving from Python 2 are most likely to end up with Python 3, I don't really see compelling alternative for them (unless they are going to something more functional like Clojure or Haskell or Scala, but that's entirely different discussion; for example I like Python a lot but I feel pure functional is where the future is, I find the imperative programming quite annoying these days, I would prefer Haskell, but frankly, I am not nearly as productive in it as I am in Python, because Python's focus on usability is very hard to match by any language).
On the other hand, I think Python 3 will actually gain in science and data analysis thanks to things like @ operator for matrix multiplication.
I see no future for Python be that 2 or 3. It's not great at anything, but projects a veneer of friendliness (that one should quickly outgrow) on top of a pile of bad implementation decisions and terrible design.
Its popularity is based on superficial attributes rather than solid foundations. Eventually, the entire ecosystem will collapse and the masses will flood to the next attractor.
Go is interesting, but really a different (and perhaps smaller) use case. What, for instance, I do in Python? That little one-off script that converts one thing to another or calculates something - I am not sure why I would even bother thinking about Go.
I have no doubt that at some point, Python will be replaced by something. But I don't think it will be any of the languages that are currently in widespread use. Heck, C is also not based on solid foundations (I mean like type theory or something), and it wasn't fully replaced yet.
C is based on the solidest possible foundation: the actual hardware CPU.
The word you are looking for is "deprecated", not obsolete.
feature proposal -> patch -> review -> mergeT-shirts are still being made; verdict: not obsolete
Python 2 is not still being made; verdict: obsolete
So, do your comparisons correctly. No matter how much you insist, Python 2 just isn't dead (or obsolete, etc.). Lack of new features doesn't imply obsolete.
Python 2 is no longer being actively developed. It receives bug fixes, and even those are scheduled to stop before too much longer. The fact that people are using Python 2 means that it's not dead, but that doesn't mean it isn't obsolete.
Think of it this way. You need a library to solve some problem, and you find one on Github. The project hasn't received any major updates in 3 years. Some people have submitted pull requests, and a few of them have even been merged, but it's clear that the maintainers are focused on other projects these days. Is that an indication that this project is simply mature and no further work is required? Or could it indicate that the maintainers want to work on other things, and this is not a priority for them any longer?
Saying that Python 2 is obsolete isn't an insult. Python 2 is popular, and loved by many, many people. It has been adopted as a teaching language by many schools, has inspired multitudes of people to learn to code, and has achieved prominence in data science, machine learning, and scientific computing. It also happens to be at the end of its lifecycle, development has moved on to Python 3, and the developers don't have much interest in maintaining Python 2 any longer.
That doesn't diminish the accomplishments of Python 2 or the people who love it. However, it does mean that the label fits.
That's because nobody (very few) use the Amiga.
On the contrary, very many, much more than use Python 3, use Python 2.
So, it's not like the Amiga at all.
It's more like as if e.g. Apple suddenly decided to stop producing laptops because "iPads are the future", and forcing these down everybody's throat.
Similarly, Python 2 might not be made anymore, but it is used everywhere, and people are making new things with it. So...it's also not obsolete.
(No, it's not related to the matter at hand, and certainly should not be taken as an attempt to further complicate this not especially fruitful wrangle. But it's a goodie and you reminded me of it so I figured I'd share.)
Python 2 is still being "worn" by millions of programmers, and is what runs in the biggest installations. This includes new code written for those installations, that it's written to run in the same 2.x environment.
That is within the rights of a manufacturer though. Coca Cola can continue to produce classic coke because it isn't any more or less complicated to produce than New Coke. The PSF's opinion is the new features they develop are best developed on top of the core changes in Python3, and that adding new features to Python2 is too expensive to maintain in addition to Python3. I feel like the cases are too different to work.
Sure. Still bad for the consumers who want the classic Coke though.
For comparison, C is not obsolete because a lot of useful programs are easiest to express in C still. I'd argue that C is obsolete for App development too, but there will be people who disagree with that.
You could still wear them today but you'd be working against today's "protocols".
Clothes are "deprecated" or "obsoleted", just like everythihg else.
The vast majority of current development out there is in python 2.x. A small minority use Python 3.x. How on earth does this make Python 2.x obsolete?
This is like saying Perl 5 is obsolete, just because Perl 6 is out and completely ignore the realities of the real world use of the products.
Here is one recent one: http://www.randalolson.com/2016/09/03/python-2-7-still-reign...
If you have counter statistics showing that Python 3.x is more popular than 2.7 I would very much like to see them.
2.7: 10 million (M)
2.6: 0.5 M
---
3.5: 1 M
3.4: 0.750 M
3.3: 0.05 M
3.2 and 3.1 too low to make a difference.
-------
So totals:
Python 2.x: 10.5 M
Python 3.x: 1.8 M
---
Python 2.x is waaaaay ahead over 3.x
But to be fair, even with that, I doubt you would get more than 30% of Python 3 users. Which is kinda in line with other surveys, such as the one from JetBrains. (It's probably a good guess that users of Python applications are even more conservative in upgrading than developers of Python applications.)