0.23 (2015-08-08)

Features added

  • PEP 492(async/await) was implemented.
  • PEP 448(Additional Unpacking Generalizations) was implemented.
  • Support for coverage.py 4.0+ can be enabled by adding the plugin“Cython.Coverage” to the “.coveragerc” config file.
  • Annotated HTML source pages can integrate (XML) coverage reports.
  • Tracing is supported in nogil functions/sections and module init code.
  • When generators are used in a Cython module and the module imports themodules “inspect” and/or “asyncio”, Cython enables interoperability bypatching these modules during the import to recognise Cython’s internalgenerator and coroutine types. This can be disabled by C compiling themodule with “-D CYTHON_PATCH_ASYNCIO=0” or “-D CYTHON_PATCH_INSPECT=0”
  • When generators or coroutines are used in a Cython module, their typesare registered with the Generator and Coroutine ABCs in thecollections or collections.abc stdlib module at import time toenable interoperability with code that needs to detect and process Pythongenerators/coroutines. These ABCs were added in CPython 3.5 and areavailable for older Python versions through the backports_abc moduleon PyPI. See https://bugs.python.org/issue24018
  • Adding/subtracting/dividing/modulus and equality comparisons withconstant Python floats and small integers are faster.
  • Binary and/or/xor/rshift operations with small constant Python integersare faster.
  • When called on generator expressions, the builtins all(), any(),dict(), list(), set(), sorted() and unicode.join()avoid the generator iteration overhead by inlining a part of theirfunctionality into the for-loop.
  • Keyword argument dicts are no longer copied on function entry when theyare not being used or only passed through to other function calls (e.g.in wrapper functions).
  • The PyTypeObject declaration in cpython.object was extended.
  • The builtin type type is now declared as PyTypeObject in source,allowing for extern functions taking type parameters to have the correctC signatures. Note that this might break code that uses type justfor passing around Python types in typed variables. Removing the typedeclaration provides a backwards compatible fix.
  • wraparound() and boundscheck() are available as no-ops in purePython mode.
  • Const iterators were added to the provided C++ STL declarations.
  • Smart pointers were added to the provided C++ STL declarations.Patch by Daniel Filonik.
  • NULL is allowed as default argument when embedding signatures.This fixes ticket 843.
  • When compiling with —embed, the internal module name is changed tomain to allow arbitrary program names, including those that wouldbe invalid for modules. Note that this prevents reuse of the generatedC code as an importable module.
  • External C++ classes that overload the assignment operator can be used.Patch by Ian Henriksen.
  • Support operator bool() for C++ classes so they can be used in if statements.

Bugs fixed

  • Calling “yield from” from Python on a Cython generator that returned avalue triggered a crash in CPython. This is now being worked around.See https://bugs.python.org/issue23996
  • Language level 3 did not enable true division (a.k.a. float division)for integer operands.
  • Functions with fused argument types that included a generic ‘object’fallback could end up using that fallback also for other explicitlylisted object types.
  • Relative cimports could accidentally fall back to trying an absolutecimport on failure.
  • The result of calling a C struct constructor no longer requires anintermediate assignment when coercing to a Python dict.
  • C++ exception declarations with mapping functions could fail to compilewhen pre-declared in .pxd files.
  • cpdef void methods are now permitted.
  • abs(cint) could fail to compile in MSVC and used sub-optimal codein C++. Patch by David Vierra, original patch by Michael Enßlin.
  • Buffer index calculations using index variables with small C integertypes could overflow for large buffer sizes.Original patch by David Vierra.
  • C unions use a saner way to coerce from and to Python dicts.
  • When compiling a module foo.pyx, the directories in sys.pathare no longer searched when looking for foo.pxd.Patch by Jeroen Demeyer.
  • Memory leaks in the embedding main function were fixed.Original patch by Michael Enßlin.
  • Some complex Python expressions could fail to compile inside of finallyclauses.
  • Unprefixed ‘str’ literals were not supported as C varargs arguments.
  • Fixed type errors in conversion enum types to/from Python. Note thatthis imposes stricter correctness requirements on enum declarations.

Other changes

  • Changed mangling scheme in header files generated by cdef apideclarations.
  • Installation under CPython 3.3+ no longer requires a pass of the2to3 tool. This also makes it possible to run Cython in Python3.3+ from a source checkout without installing it first.Patch by Petr Viktorin.
  • jedi-typer.py (in Tools/) was extended and renamed tojedityper.py (to make it importable) and now works with andrequires Jedi 0.9. Patch by Tzer-jen Wei.