PyPy v7.3.12: release of python 2.7, 3.9, and 3.10¶
This is a pre-release announcement. When the release actually happens, it will be announced on the PyPy blog
The PyPy team is proud to release version 7.3.12 of PyPy. This release includes a new string-to-int algorithm (also appearing in CPython 3.12) that is faster than the older one; support for symlinks in Windows; and our first Python3.10 version.
The release includes three different interpreters:
- PyPy2.7, which is an interpreter supporting the syntax and the features of Python 2.7 including the stdlib for CPython 2.7.18+ (the
+is for backported security updates)
- PyPy3.9, which is an interpreter supporting the syntax and the features of Python 3.9, including the stdlib for CPython 3.9.16.
- PyPy3.10, which is an interpreter supporting the syntax and the features of Python 3.10, including the stdlib for CPython 3.10.11. This is our first release of 3.10, but based on past experience we are quite confident in its compatibility with upstream. Of course, we recommend testing your code with this new version before putting it into production. Note it does require at least cython 0.29.35 or cython 3.0.0b3
The interpreters are based on much the same codebase, thus the multiple release. This is a micro release, all APIs are compatible with the other 7.3 releases. It follows after 7.3.11 release on Dec 29, 2022
We recommend updating. You can find links to download the v7.3.12 releases here:
We would like to thank our donors for the continued support of the PyPy project. If PyPy is not quite good enough for your needs, we are available for direct consulting work. If PyPy is helping you out, we would love to hear about it and encourage submissions to our blog via a pull request to https://github.com/pypy/pypy.org
We would also like to thank our contributors and encourage new people to join the project. PyPy has many layers and we need help with all of them: bug fixes, PyPy and RPython documentation improvements, or general help with making RPython’s JIT even better. Since the previous release, we have accepted contributions from one new contributor, thanks for pitching in, and welcome to the project!
If you are a python library maintainer and use C-extensions, please consider making a HPy / CFFI / cppyy version of your library that would be performant on PyPy. In any case, both cibuildwheel and the multibuild system support building wheels for PyPy.
What is PyPy?¶
PyPy is a Python interpreter, a drop-in replacement for CPython It’s fast (PyPy and CPython 3.7.4 performance comparison) due to its integrated tracing JIT compiler.
We also welcome developers of other dynamic languages to see what RPython can do for them.
We provide binary builds for:
- x86 machines on most common operating systems (Linux 32/64 bits, Mac OS 64 bits, Windows 64 bits)
- 64-bit ARM machines running Linux (
- Apple M1 arm64 machines (
- s390x running Linux
PyPy support Windows 32-bit, Linux PPC64 big- and little-endian, and Linux ARM 32 bit, but does not release binaries. Please reach out to us if you wish to sponsor binary releases for those platforms. Downstream packagers provide binary builds for debian, Fedora, conda, OpenBSD, FreeBSD, Gentoo, and more.
For all versions¶
- Update vendored version of pycparser
- Update to ssl 1.1.1t, 3.0.8 when embedding libraries
- Allow creating
- Add memory pressure for malloc allocations in
_ssl, fix OpenSSL context use
- Pair OpenSSL allocation calls better with free calls in
- Only define
- Fix wrong assert in
intutils, it should be an
InvalidLoopinstead (issue 3892:_)
space.index(W_Bool)should return an
int, not a
- Skip cpython pickling of
- Support loading c-extension modules with both
ppc_64-linux-gnuplatform tags (issue 3834)
- Fix various cases where a mutating
__index__method could crash the interpreter (issue 3917)
- Use C99
Speedups and enhancements¶
- Do less string copies in the bytecode compiler
- Add missing CJK range in unicodedata version 13
- Implement the base 10
string-to-intconversion using a divide an conquer algorithm with complexity
O(n**1.58). The algorithm is due to Bjorn Martinsson and is part of CPython 3.12.
- Fix corner case when computing
- Fix misnamed function (issue 3874)
- Disallow pickle of
- Make sure that the max stackdepth is observed in method calls
utf-32errorhandler replacement logic: if the replacement is bytes. those are just copied to the output
- Fix the problems of https://bugs.python.org/issue36819
str_decode_raw_unicode_escapefor the case of
\\, which was incorrectly special-cased.
- Forbid null bytes in
r_longlongmath in nanosecond time for
perf_counteron windows (issue 3890)
- Fix for
item == obj(bpo-37648)
- Allow indexing with a class with a
- Fix weirdness about combining annotations and a global declaration of a name in some random function (issue 3925)
- Fix wrong implementation of
_copy_basefor slices of n-dimensional buffers (issue 3520)
- Trim the scope ID from IPV6 addresses (issue 3938, reversing the decision in issue 3628)
- Properly create a C-level wrapper that calls
__del__is called, which allows us to use
Speedups and enhancements¶
- Speed up
nametuple _replaceby code generation (issue 3884)
- Correct exception on positional arguments, while supporting empty namedtuple (?) at the same time
os.mkdirfor unicode handling via teaching rposix about utf-8 paths, which could lead to removing the last vestiges of unicode from rpython.
os.unlinkto take symlink into account on windows
W_LongObjecton pypy3, where there is no observable applevel difference between
_PyEval_GetAsyncGenFinalizerfor use by cython, towards fixing issue 3280
- Squeeze a little more accuracy out of windows
time.time(), to make a cython test pass