PyPy v7.3.12: release of python 2.7, 3.9, and 3.10¶
Note
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 (
aarch64
).- Apple M1 arm64 machines (
macos_arm64
).- 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.
Changelog¶
For all versions¶
- Update vendored version of pycparser
- Update to ssl 1.1.1t, 3.0.8 when embedding libraries
Bugfixes¶
- Allow creating
ctypes.py_object()
on aweakref
(issue 3883) - Add memory pressure for malloc allocations in
_ssl
, fix OpenSSL context use - Pair OpenSSL allocation calls better with free calls in
_ssl
(issue 3887) - Only define
SO
insysconfig
ifimp.get_suffixes()
hasimp.C_EXTENSION
- Fix wrong assert in
intutils
, it should be anInvalidLoop
instead (issue 3892:_) - export
PyDescr_NewGetSet
and definePyDescr_TYPE
,PyDescr_NAME
space.index(W_Bool)
should return anint
, not abool
(issue 3906)- Skip cpython pickling of
range
- Support loading c-extension modules with both
powerpc64le-linux-gnu
andppc_64-linux-gnu
platform tags (issue 3834) - Fix various cases where a mutating
__index__
method could crash the interpreter (issue 3917) - Use C99
NAN
forPy_NAN
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-int
conversion using a divide an conquer algorithm with complexityO(n**1.58)
. The algorithm is due to Bjorn Martinsson and is part of CPython 3.12.
Python 3.9+¶
Bugfixes¶
- Fix corner case when computing
__main__.__file__
(issue 3881) - Fix misnamed function (issue 3874)
- Disallow pickle of
staticmethod
,classmethod
, andDirEntry
- Make sure that the max stackdepth is observed in method calls
- Fix
utf-16
andutf-32
errorhandler replacement logic: if the replacement is bytes. those are just copied to the output - Fix the problems of https://bugs.python.org/issue36819
- Fix
str_decode_raw_unicode_escape
for the case of\\
, which was incorrectly special-cased. - Forbid null bytes in
pwd.getpwnam
- Use
r_longlong
math in nanosecond time forperf_counter
on windows (issue 3890) - Fix for
tuple.contains(obj)
usingitem == obj
(bpo-37648) - Allow indexing with a class with a
__index__
method - Implement
__copy__
and__deepcopy__
forzlib
(de)compressors - Fix weirdness about combining annotations and a global declaration of a name in some random function (issue 3925)
- Fix wrong implementation of
_copy_base
for slices of n-dimensional buffers (issue 3520) - Trim the scope ID from IPV6 addresses (issue 3938, reversing the decision in issue 3628)
- Add
_hashlib.scrypt
(issue 3921) - Properly create a C-level wrapper that calls
tp_finalize
when__del__
is called, which allows us to useCYTHON_USE_TP_FINALIZE
in cython - Move
hpy.dist-info
tohpy-0.0.4.dist-info
(issue 3579)
Speedups and enhancements¶
- Speed up
nametuple _replace
by code generation (issue 3884) - Correct exception on positional arguments, while supporting empty namedtuple (?) at the same time
- Implement
os.symlink
andos.readlink
on windows - Fix
os.mkdir
for unicode handling via teaching rposix about utf-8 paths, which could lead to removing the last vestiges of unicode from rpython. - Refactor
os.remove
/os.unlink
to take symlink into account on windows - Increment
macosx-version-min
to 10.9 space.newlong
returns aW_LongObject
on pypy3, where there is no observable applevel difference betweenW_IntObject
andW_LongObject
- Provide
_PyEval_GetAsyncGenFirstiter
and_PyEval_GetAsyncGenFinalizer
for use by cython, towards fixing issue 3280 - Squeeze a little more accuracy out of windows
time.time()
, to make a cython test pass