0.19 (2013-04-19)

Features added

  • New directives c_string_type and c_string_encoding to more easilyand automatically convert between C strings and the different Python stringtypes.
  • The extension type flag Py_TPFLAGS_HAVE_VERSION_TAG is enabled by defaulton extension types and can be disabled using the type_version_tag compilerdirective.
  • EXPERIMENTAL support for simple Cython code level line tracing. Enabled bythe “linetrace” compiler directive.
  • Cython implemented functions make their argument and return type annotationsavailable through the annotations attribute (PEP 3107).
  • Access to non-cdef module globals and Python object attributes is faster.
  • Py_UNICODE* coerces from and to Python unicode strings. This ishelpful when talking to Windows APIs, which use compatible wchar_tarrays for strings. Note that the Py_UNICODE type is otherwisedeprecated as of CPython 3.3.
  • isinstance(obj, basestring) is optimised. In Python 3 it only testsfor instances of str (i.e. Py2 unicode).
  • The basestring builtin is mapped to str (i.e. Py2 unicode) whencompiling the generated C code under Python 3.
  • Closures use freelists, which can speed up their creation quite substantially.This is also visible for short running generator expressions, for example.
  • A new class decorator @cython.freelist(N) creates a static freelist of Ninstances for an extension type, thus avoiding the costly allocation step ifpossible. This can speed up object instantiation by 20-30% in suitablescenarios. Note that freelists are currently only supported for base types,not for types that inherit from others.
  • Fast extension type instantiation using the Type.new(Type) idiom hasgained support for passing arguments. It is also a bit faster for types definedinside of the module.
  • The Python2-only dict methods .iter() and .view() (requires Python 2.7)are automatically mapped to the equivalent keys/values/items methods in Python 3for typed dictionaries.
  • Slicing unicode strings, lists and tuples is faster.
  • list.append() is faster on average.
  • raise Exception() from None suppresses the exception context in Py3.3.
  • Py3 compatible exec(tuple) syntax is supported in Py2 code.
  • Keyword arguments are supported for cdef functions.
  • External C++ classes can be declared nogil. Patch by John Stumpo. This fixestrac ticket 805.

Bugs fixed

  • 2-value slicing of unknown objects passes the correct slice when the getitemprotocol is used instead of the getslice protocol (especially in Python 3),i.e. None values for missing bounds instead of [0,maxsize]. It is alsoa bit faster in some cases, e.g. for constant bounds. This fixes trac ticket 636.
  • Cascaded assignments of None values to extension type variables failed witha TypeError at runtime.
  • The defaults attribute was not writable for Cython implementedfunctions.
  • Default values of keyword-only arguments showed up in defaults insteadof kwdefaults (which was not implemented). Both are available forCython implemented functions now, as specified in Python 3.x.
  • yield works inside of with gil sections. It previously lead to a crash.This fixes trac ticket 803.
  • Static methods without explicitly named positional arguments (e.g. having only*args) crashed when being called. This fixes trac ticket 804.
  • dir() without arguments previously returned an unsorted list, which nowgets sorted as expected.
  • dict.items(), dict.keys() and dict.values() no longer return listsin Python 3.
  • Exiting from an except-as clause now deletes the exception in Python 3 mode.
  • The declarations of frexp() and ldexp() in math.pxd were incorrect.

Other changes