# What's new in PyPy 2.5.0

Fix c code generation for msvc so empty "{ }" are avoided in unions, Avoid re-opening files created with NamedTemporaryFile, Allocate by 4-byte chunks in rffi_platform, Skip testing objdump if it does not exist, and other small adjustments in own tests

Small internal refactorings in the rtyper.

Store annotations on the Variable objects, rather than in a big dict. Introduce a new framework for double-dispatched annotation implementations.

Refactor ClassRepr and make normalizecalls independent of the rtyper.

Remove all remaining multimethods.

Split RPython documentation from PyPy documentation and clean up. There now is a clearer separation between documentation for users, developers and people interested in background information.

Kill multimethod machinery, all multimethods were removed earlier.

Implement external_loop argument to numpy's nditer

Rename pypy/module/rctime to pypy/module/time, since it contains the implementation of the 'time' module.

Use SSA form for flow graphs inside build_flow() and part of simplify_graph()

Implement most of the GenericUfunc api to support numpy linalg. The strategy is to encourage use of pure python or cffi ufuncs by extending frompyfunc(). See the docstring of frompyfunc for more details. This dovetails with a branch of pypy/numpy - cffi-linalg which is a rewrite of the _umath_linalg module in python, calling lapack from cffi. The branch also support traditional use of cpyext GenericUfunc definitions in c.

This makes ordered dicts the default dictionary implementation in RPython and in PyPy. It polishes the basic idea of rordereddict.py and then fixes various things, up to simplifying collections.OrderedDict.

Note: Python programs can rely on the guaranteed dict order in PyPy now, but for compatibility with other Python implementations they should still use collections.OrderedDict where that really matters. Also, support for reversed() was not added to the 'dict' class; use OrderedDict.

Benchmark results: in the noise. A few benchmarks see good speed improvements but the average is very close to parity.

This branch adds an interface rgc.pin which would (very temporarily) make object non-movable. That's used by rffi.alloc_buffer and rffi.get_nonmovable_buffer and improves performance considerably for IO operations.

A branch started by Wenzhu Man (SoC'14) and then done by fijal. It removes the clearing of the nursery. The drawback is that new objects are not automatically filled with zeros any longer, which needs some care, mostly for GC references (which the GC tries to follow, so they must not contain garbage). The benefit is a quite large speed-up.

Fix intern() to return mortal strings, like in CPython.

`--shared` support on OS/X (thanks wouter)

Changes how errno, GetLastError, and WSAGetLastError are handled. The idea is to tie reading the error status as close as possible to the external function call. This fixes some bugs, both of the very rare kind (e.g. errno on Linux might in theory be overwritten by mmap(), called rarely during major GCs, if such a major GC occurs at exactly the wrong time), and some of the less rare kind (particularly on Windows tests).

Improve performance of integer globals and class attributes.