Skip to content

ReleaseNotes 0.17

StefanBehnel edited this page · 51 revisions
Clone this wiki locally

Cython 0.17

The bug tracker has a list of the major improvements.


  • Alpha quality support for compiling and running Cython generated extension modules in PyPy (through cpyext). Note that this requires at least``PyPy`` 1.9 and in many cases also adaptations in user code, especially to avoid borrowed references when no owned reference is being held directly in C space (a reference in a Python list or dict is not enough, for example). See the documentation on porting Cython code to PyPy.
  • "yield from" is supported (PEP 380) and a couple of minor problems with generators were fixed.
  • C++ STL container classes automatically coerce from and to the equivalent Python container types on typed assignments and casts. Usage examples are here. Note that the data in the containers is copied during this conversion.
  • C++ iterators can now be iterated over using for x in cpp_container whenever cpp_container has begin() and end() methods returning objects satisfying the iterator pattern (that is, it can be incremented, dereferenced, and compared (for non-equality)).
  • cdef classes can now have C++ class members (provided a zero-argument constructor exists)
  • A new cpython.array standard cimport file allows to efficiently talk to the stdlib array.array data type in Python 2. Since CPython does not export an official C-API for this module, it receives special casing by the compiler in order to avoid setup overhead on user side. In Python 3, both buffers and memory views on the array type already worked out of the box with earlier versions of Cython due to the native support for the buffer interface in the Py3 array module.
  • Fast dict iteration is now enabled optimistically also for untyped variables when the common iteration methods are used.
  • The unicode string processing code was adapted for the upcoming CPython 3.3 (PEP 393, new Unicode buffer layout).
  • Buffer arguments and memory view arguments in Python functions can be declared "not None" to raise a TypeError on None input.
  • c(p)def functions in pure mode can specify their return type with "@cython.returns()".
  • Automatic dispatch for fused functions with memoryview arguments
  • Support newaxis indexing for memoryviews
  • Support decorators for fused functions

General Improvements and Bug Fixes

  • Old-style Py2 imports did not work reliably in Python 3.x and were broken in Python 3.3. Regardless of this fix, it's generally best to be explicit about relative and global imports in Cython code because old-style imports have a higher overhead. To this end, "from __future__ import absolute_import" is supported in Python/Cython 2.x code now (previous versions of Cython already used it when compiling Python 3 code).
  • Stricter constraints on the inline and final modifiers. If your code does not compile due to this change, chances are these modifiers were previously being ignored by the compiler and can be removed without any performance regression.
  • Exceptions are always instantiated while raising them (as in Python), instead of risking to instantiate them in potentially unsafe situations when they need to be handled or otherwise processed.
  • locals() properly ignores names that do not have Python compatible types (including automatically inferred types).
  • Some garbage collection issues of memory views were fixed.
  • User declared char* types are now recognised as such and auto-coerce to and from Python bytes strings.
  • libc.string provides a convenience declaration for const uchar in addition to const char.
  • Modules generated by @cython.inline() are written into the directory pointed to by the environment variable CYTHON_CACHE_DIR if set.
  • numpy.pxd compiles in Python 3 mode.
  • callable() and next() compile to more efficient C code.
  • list.append() is faster on average.
  • Several C compiler warnings were fixed.
  • Several bugs related to memoryviews and fused types were fixed.
  • Several bug-fixes and improvements related to cythonize(), including ccache-style caching.


Many thanks to all people who contributed to this release:

  • Stefan Behnel
  • Robert Bradshaw
  • Matthew Brett
  • Steven Byrnes
  • Eric Chlebek
  • Andreas van Cranenburgh
  • Mark Florisson
  • Bradley M. Froehle
  • Yaroslav O. Halchenko
  • Vitja Makarov
  • Peinthor Rene
  • Benjamin RK
  • Dag Sverre Seljebotn
  • Dimitri Tcaciuc
  • Gregor Thalhammer
  • Peter Todd
  • Mathieu Virbel

Beta releases

Cython 0.17 beta 4 - final release candidate

Cython 0.17 beta 3 - release candidate

Cython 0.17 beta 2

Cython 0.17 beta 1

Something went wrong with that request. Please try again.