0.22 (2015-02-11)

Features added

  • C functions can coerce to Python functions, which allows passing themaround as callable objects.
  • C arrays can be assigned by value and auto-coerce from Python iterablesand to Python lists (and tuples).
  • Extern C functions can now be declared as cpdef to export them tothe module’s Python namespace. Extern C functions in pxd files exporttheir values to their own module, iff it exists.
  • Anonymous C tuple types can be declared as (ctype1, ctype2, …).
  • PEP 479:turn accidental StopIteration exceptions that exit generatorsinto a RuntimeError, activated with future import “generator_stop”.
  • Looping over reversed(range()) is optimised in the same way asrange(). Patch by Favian Contreras.

Bugs fixed

  • Mismatching ‘except’ declarations on signatures in .pxd and .pyx files failedto produce a compile error.
  • Failure to find any files for the path pattern(s) passed into cythonize()is now an error to more easily detect accidental typos.
  • The logaddexp family of functions in numpy.math now has correctdeclarations.
  • In Py2.6/7 and Py3.2, simple Cython memory views could accidentally beinterpreted as non-contiguous by CPython, which could trigger a CPythonbug when copying data from them, thus leading to data corruption.See CPython issues 12834 and 23349.

Other changes

  • Preliminary support for defining the Cython language with a formal grammar.To try parsing your files against this grammar, use the –formal_grammar directive.Experimental.
  • _ is no longer considered a cacheable builtin as it could interfere withgettext.
  • Cythonize-computed metadata now cached in the generated C files.
  • Several corrections and extensions in numpy, cpython, and libcpp pxd files.