ReleaseNotes 0.19 - cython/cython GitHub Wiki
- Release date: April 19, 2013
- Downloads: * http://cython.org/release/Cython-0.19.tar.gz MD5 * http://cython.org/release/Cython-0.19.zip MD5
- Git: https://github.com/cython/cython/tree/0.19
The bug tracker has a list of the major improvements.
- New directives
c_string_typeandc_string_encodingto more easily and automatically convert between C strings and the different Python string types.- The extension type flag
Py_TPFLAGS_HAVE_VERSION_TAGis enabled by default on extension types and can be disabled using thetype_version_tagcompiler directive.- EXPERIMENTAL support for simple Cython code level line tracing. Enabled by the "
linetrace" compiler directive.- Cython implemented functions make their argument and return type annotations available 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 is helpful when talking to Windows APIs, which use compatiblewchar_tarrays for strings. Note that thePy_UNICODEtype is otherwise deprecated as of CPython 3.3.isinstance(obj, basestring)is optimized. In Python 3 it only tests for instances ofstr(i.e. Py2unicode).- The
basestringbuiltin is mapped tostr(i.e. Py2unicode) when compiling 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 N instances for an extension type, thus avoiding the costly allocation step if possible. This can speed up object instantiation by 20-30% in suitable scenarios. 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 has gained support for passing arguments. It is also a bit faster for types defined inside 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 3 for typed dictionaries.- Slicing unicode strings, lists and tuples is faster.
- list.append() is faster on average.
raise Exception() from Nonesuppresses 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 fixes trac ticket 805.
- 2-value slicing of unknown objects passes the correct slice when the
getitemprotocol is used instead of thegetsliceprotocol (especially in Python 3), i.e.Nonevalues for missing bounds instead of[0,maxsize]. It is also a 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 with a
TypeErrorat runtime.- The
__defaults__attribute was not writable for Cython implemented functions.- Default values of keyword-only arguments showed up in
``__defaults__``instead of__kwdefaults__(which was not implemented). Both are available for Cython implemented functions now, as specified in Python 3.x.yieldworks inside ofwith gilsections. 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 now gets sorted as expected.dict.items(),dict.keys()anddict.values()no longer return lists in Python 3.- Exiting from an
except-asclause now deletes the exception in Python 3 mode.- The declarations of
frexp()andldexp()inmath.pxdwere incorrect.
CategoryReleaseNotes