2008-12-05

What's with the 3.0 hatin'?

So some people don't seem to get the point of 3.0 (Jens seems to be getting the traffic on this one). While others do get it (go, James). I figured I should pipe up on this before this gets too much momentum and prevents even common sense from prevailing.

First of all, 2.x is not going away! While you current code (most likely) won't run without modification, it doesn't have to change today. We are committed to maintaining the 2.x series for YEARS. Notice how Python 2.6.1 was just released. And there will be a 2.7. And we will continue to fix bugs and backport them. The most optimistic timeline I have heard of the community in general switching over to 3.x is three years. But if you want to fix your problems you have to, at some point, just break some stuff. This is that time for Python.

Secondly, have the people who seem worried actually tried porting any code over? 2to3 does a good job. A lot of effort has gone into making sure that there are plenty of warnings where they are needed and for 2to3 to do as much as possible. And it will all continue to get better as we add more to 2to3, find any holes we missed, etc. While it isn't fully automated obviously, you won't have to write your code from scratch either.

And do realize we did not do this just for fun. If that were true I would have been allowed to do a lot more crazy things that breaks code more severely then I got to do. Instead we made sure that changes that broke code only occurred if it was truly beneficial to the language and worth the breakage. We treated 3.0 like any other release: pragmatically.

Yes, there is some performance regressions. But do realize the I/O system, for instance, was rewritten from scratch to be better. We lost optimizations in various areas in order to get things correct. And there is just a bunch of new code. But we as developers use Python. We want it to be fast as well. It will improve.

And I think some people don't fully appreciate how much nicer the language is. Anyone who deals with Unicode will instantly realize that 3.0 is a godsend for them. And other things are just plain cleaner.

Please just give 3.0 a chance. Realize what has changed (for the better!). If you have quick scripts that don't rely on any libraries, try writing them for 3.0. Other code that doesn't need backwards-compatibility past 2.6, target 2.6 and be aware of stuff that might be tripped up in 3.0. And this extends to 2.5 as well; just be aware of the stuff that 2to3 can't do for you and code accordingly (it isn't hard and completely doable in older versions of Python).

And the libraries are coming. I have personally heard both the Django and Pylons developers, for instance, say they will port to 3.0. Just give it some time.