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_type
andc_string_encoding
to more easily and automatically convert between C strings and the different Python string types.- The extension type flag
Py_TPFLAGS_HAVE_VERSION_TAG
is enabled by default on extension types and can be disabled using thetype_version_tag
compiler 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_t
arrays for strings. Note that thePy_UNICODE
type 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
basestring
builtin 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 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 fixes trac ticket 805.
- 2-value slicing of unknown objects passes the correct slice when the
getitem
protocol is used instead of thegetslice
protocol (especially in Python 3), i.e.None
values 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
TypeError
at 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.yield
works inside ofwith 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 now gets sorted as expected.dict.items()
,dict.keys()
anddict.values()
no longer return lists in Python 3.- Exiting from an
except-as
clause now deletes the exception in Python 3 mode.- The declarations of
frexp()
andldexp()
inmath.pxd
were incorrect.
CategoryReleaseNotes