PyPy3 5.5.0 released(morepypy.blogspot.com) |
PyPy3 5.5.0 released(morepypy.blogspot.com) |
So what is the best way I can help support pypy3? Are there any easy issues I can help contribute to?
The page mentions pypy3's current status as of August 2016: "We are soon releasing a beta supporting Python 3.3. For the next full year, though, see PyPy gets funding from Mozilla for Python 3.5 support. Individual donations through here are still welcome, and go towards the same goal, which is upgrading PyPy to support Python 3.x (which really means 3.3/3.5 by now). Thanks to all our past contributors! Your money has been put to good use so far."
My biggest issue with PyPy is library/modules incompatibility. I work in forensics, and I honestly tried using most of the python based tools with PyPy, and many just don't work because of lib/module dependencies. The few that do, may or may not run faster, depending on your use case and even the case (some have slower initialization but process faster, so with a big enough target file you get things done quicker). And while I am sort of a developer, I also have to solve cases, so I don't have enough time to sit and port all the libraries of 20 different tools to work in PyPy.
And if performance is still a need (it always is in forensics, with more cases with larger drives/memory coming all the time), there's Cython, and with it we've gotten speedups ranging from the few percent (about 14% from "removing the interpreter") to 20-30x faster -- which has the side-effect of revealing yet another bottleneck in the application, but hey, now you know.
So, seeing the things that are coming to Python 3, I sincerely hope PyPy exists and goes on living, but I much rather CPython be the future of Python -- because it is good, compatible (mostly), it has the right tools, and things work.
[0] https://mail.python.org/pipermail/python-dev/2016-September/...
Addressing this has been a big focus for PyPy lately. You should consider re-evaluating PyPy. numpy (arguably one of the heaviest users of C extensions) works on pypy at very nearly 100% of its tests passing.
I wonder if I'll ever get to use Pypy in anger or will something in Python 3.6+ distract me (those f-strings look pretty fancy, dammit).
Can someone eli5 how pypy achieves such difference and why that improvement cannot be contributed back to python3?
PyPy is a completely different implementation of Python, so it's impossible to simply contribute improvements from it to CPython. To answer the question I think you're asking, though, the main reason we can't just have PyPy replace CPython as the default implementation isn't strictly technical: The Python community (Guido in particular) has decided to keep the reference implementation (CPython) as simple and consistent as possible, so that it's easy to contribute to and doesn't have any surprising behavior. PyPy, by comparison, is an incredibly complex piece of software. Even if you ignore the fact that it would make contributions harder, its performance is, in many scenarios, actually significantly worse than CPython's, because its optimizations rely on specific patterns within your code. I think it's mostly a good thing that PyPy is its own project and not the default implementation of Python, because it allows Python (the language) to grow much faster than it would otherwise.
I hope that answers your question. I apologize to anyone who knows more about the details than I do if I over-simplified things. :)
Personally while I appreciate what PyPy are trying to do, for a lot of real world use cases you can get really impressive performance out of python using the right libraries (see: the entire Python scientific computing stack).
But the OP seems to be interested in web dev where Julia does not deserve the same attention as PyPy, node, and Go.
Breaking changes I would include would be : remove all the deprecated bits of subprocess or replace it entirely, remove the zip, ftp and other modules in favour of virtual filesystems with a consistent api and finally try and make all the APIs symmetrical (e.g. open always paired with close, push with pop etc).
But then I am too lazy :)
By the time Julia hits 1.0, I wouldn't be surprised if someone had developed a decent networking library.
Also, startup time of volatility exploded for no apparent reason (4 seconds CPython vs 12 seconds PyPy, latest 2.7 branch). Real analysis time was indeed faster (~30 seconds CPython vs ~15 seconds PyPy), but half the plugins won't work.
Plus, in the end (startup+analysis), both CPython and PyPy got close results (though arguably PyPy was some about 15% faster).