# What’s new in PyPy 2.2

Make PyPy’s bytecode dispatcher easy to read, and less reliant on RPython magic. There is no functional change, though the removal of dead code leads to many fewer tests to execute.

Fast json decoder written in RPython, about 3-4x faster than the pure Python decoder which comes with the stdlib

Improve the performance of I/O writing up to 15% by using memcpy instead of copying char-by-char in str2charp and get_nonmovingbuffer

Simplify rpython/flowspace/ code by using more metaprogramming. Create SpaceOperator class to gather static information about flow graph operations.

Adapt package.py script to compile CFFI tk extension. Add a –without-tk switch to optionally skip it.

Copy CPython’s implementation of customize_compiler, dont call split on environment variables, honour CFLAGS, CPPFLAGS, LDSHARED and LDFLAGS on Unices.

When an RPython class is instantiated via an indirect call (that is, which class is being instantiated isn’t known precisely) allow the optimizer to have more precise information about which functions can be called. Needed for Topaz.

Make PyPy respect PYTHONINSPECT variable set via os.putenv in the same process to start interactive prompt when the script execution finishes. This adds new __pypy__.os.real_getenv call that bypasses Python cache and looksup env in the underlying OS. Translatorshell now works on PyPy.

Added os.statvfs and os.fstatvfs

Added some addition tests for statvfs.

Allow subclassing ndarray, i.e. matrix

Implement ndarray in-place sorting (for numeric types, no non-native byte order)

Implement much of numpy’s c api in cpyext, allows (slow) access to ndarray from c

Added an abstraction for functions with a fast and slow path in the JIT. This speeds up list.append() and list.pop().

Constant-fold reading out of constant tuples in PyPy.

No longer delegate numpy string methods to space.StringObject, in numpy this works by kind of by accident. Support for merging the refactor-str-types branch

Remove the “type system” abstraction, now that there is only ever one kind of type system used.

Kills gen_store_back_in_virtualizable - should improve non-inlined calls by a bit

Work on improving UnionError messages and stack trace displays.

More improvements and refactorings of error messages.

Unbreak tests in rlib.

Use subclasses of SpaceOperation instead of SpaceOperator objects. Random cleanups in flowspace.

make open() and friends rpython

Added the new incminimark GC which performs GC in incremental steps

fastpath for cffi.new(“long[]”)

remove a pointless abstraction

Allow the jit to continue running when sys.settrace() is active, necessary to make coverage.py fast

Remove lib_pypy/numpypy in favor of external numpy fork

Tweak the jit counters: decay them at minor collection (actually only every 32 minor collection is enough). Should avoid the “memory leaks” observed in long-running processes, actually created by the jit compiling more and more rarely executed paths.

Fixed the usage of sys.settrace() with the JIT. Also made it so using sys.settrace() doesn’t cause the GIL to be released on every single iteration.

Implement OrderedDict in RPython