======================
What's new in PyPy 5.0
======================

.. this is a revision shortly after release-4.0.1
.. startrev: 4b5c840d0da2

Fixed ``_PyLong_FromByteArray()``, which was buggy.

Fixed a crash with stacklets (or greenlets) on non-Linux machines
which showed up if you forget stacklets without resuming them.

.. branch: numpy-1.10

Fix tests to run cleanly with -A and start to fix micronumpy for upstream numpy
which is now 1.10.2

.. branch: osx-flat-namespace

Fix the cpyext tests on OSX by linking with -flat_namespace

.. branch: anntype

Refactor and improve exception analysis in the annotator.

.. branch: posita/2193-datetime-timedelta-integrals

Fix issue #2193. ``isinstance(..., int)`` => ``isinstance(..., numbers.Integral)`` 
to allow for alternate ``int``-like implementations (e.g., ``future.types.newint``)

.. branch: faster-rstruct

Improve the performance of struct.unpack, which now directly reads inside the
string buffer and directly casts the bytes to the appropriate type, when
allowed. Unpacking of floats and doubles is about 15 times faster now, while
for integer types it's up to ~50% faster for 64bit integers.

.. branch: wrap-specialisation

Remove unnecessary special handling of space.wrap().

.. branch: compress-numbering

Improve the memory signature of numbering instances in the JIT. This should massively
decrease the amount of memory consumed by the JIT, which is significant for most programs.

.. branch: fix-trace-too-long-heuristic

Improve the heuristic when disable trace-too-long

.. branch: fix-setslice-can-resize

Make rlist's ll_listsetslice() able to resize the target list to help
simplify objspace/std/listobject.py. Was issue #2196.

.. branch: anntype2

A somewhat random bunch of changes and fixes following up on branch 'anntype'. Highlights:

- Implement @doubledispatch decorator and use it for intersection() and difference().

- Turn isinstance into a SpaceOperation

- Create a few direct tests of the fundamental annotation invariant in test_model.py

- Remove bookkeeper attribute from DictDef and ListDef.

.. branch: cffi-static-callback

.. branch: vecopt-absvalue

- Enhancement. Removed vector fields from AbstractValue.

.. branch: memop-simplify2

Simplification. Backends implement too many loading instructions, only having a slightly different interface.
Four new operations (gc_load/gc_load_indexed, gc_store/gc_store_indexed) replace all the
commonly known loading operations

.. branch: more-rposix

Move wrappers for OS functions from `rpython/rtyper` to `rpython/rlib` and 
turn them into regular RPython functions. Most RPython-compatible `os.*` 
functions are now directly accessible as `rpython.rposix.*`.

.. branch: always-enable-gil

Simplify a bit the GIL handling in non-jitted code.  Fixes issue #2205.

.. branch: flowspace-cleanups

Trivial cleanups in flowspace.operation : fix comment & duplicated method

.. branch: test-AF_NETLINK

Add a test for pre-existing AF_NETLINK support. Was part of issue #1942.

.. branch: small-cleanups-misc

Trivial misc cleanups: typo, whitespace, obsolete comments

.. branch: cpyext-slotdefs
.. branch: fix-missing-canraise
.. branch: whatsnew

.. branch: fix-2211

Fix the cryptic exception message when attempting to use extended slicing
in rpython. Was issue #2211.

.. branch: ec-keepalive

Optimize the case where, in a new C-created thread, we keep invoking
short-running Python callbacks.  (CFFI on CPython has a hack to achieve
the same result.)  This can also be seen as a bug fix: previously,
thread-local objects would be reset between two such calls.

.. branch: globals-quasiimmut

Optimize global lookups.

.. branch: cffi-static-callback-embedding

Updated to CFFI 1.5, which supports a new way to do embedding.
Deprecates https://pypy.readthedocs.org/en/latest/embedding.html.

.. branch: fix-cpython-ssl-tests-2.7

Fix SSL tests by importing cpython's patch


.. branch: remove-getfield-pure

Remove pure variants of ``getfield_gc_*`` operations from the JIT. Relevant
optimizations instead consult the field descriptor to determine the purity of
the operation. Additionally, pure ``getfield`` operations are now handled
entirely by `rpython/jit/metainterp/optimizeopt/heap.py` rather than
`rpython/jit/metainterp/optimizeopt/pure.py`, which can result in better codegen
for traces containing a large number of pure getfield operations.

.. branch: exctrans

Try to ensure that no new functions get annotated during the 'source_c' phase.
Refactor sandboxing to operate at a higher level.

.. branch: cpyext-bootstrap

.. branch: vmprof-newstack

Refactor vmprof to work cross-operating-system.

.. branch: seperate-strucmember_h

Separate structmember.h from Python.h Also enhance creating api functions
to specify which header file they appear in (previously only pypy_decl.h) 

.. branch: llimpl

Refactor register_external(), remove running_on_llinterp mechanism and
apply sandbox transform on externals at the end of annotation.

.. branch: cffi-embedding-win32

.. branch: windows-vmprof-support

vmprof should work on Windows.


.. branch: reorder-map-attributes

When creating instances and adding attributes in several different orders
depending on some condition, the JIT would create too much code. This is now
fixed.

.. branch: cpyext-gc-support-2

Improve CPython C API support, which means lxml now runs unmodified
(after removing pypy hacks, pending pull request)

.. branch: look-inside-tuple-hash

Look inside tuple hash, improving mdp benchmark

.. branch: vlen-resume

Compress resume data, saving 10-20% of memory consumed by the JIT

.. branch: issue-2248

.. branch: ndarray-setitem-filtered

Fix boolean-array indexing in micronumpy

.. branch: numpy_partition

Support ndarray.partition() as an app-level function numpy.core._partition_use,
provided as a cffi wrapper to upstream's implementation in the pypy/numpy repo

