Cython v0.28 Release Notes
Release Date: 2018-03-13 // about 6 years ago-
๐ Features added
Cdef classes can now multiply inherit from ordinary Python classes. (The primary base must still be a c class, possibly
object
, and the other bases must not be cdef classes.)๐ Type inference is now supported for Pythran compiled NumPy expressions. Patch by Nils Braun. (Github issue :issue:
1954
)The
const
modifier can be applied to memoryview declarations to allow read-only buffers as input. (Github issues :issue:1605
, :issue:1869
)๐ C code in the docstring of a
cdef extern
block is copied verbatimly into the generated file. Patch by Jeroen Demeyer. (Github issue :issue:1915
)When compiling with gcc, the module init function is now tuned for small code size instead of whatever compile flags were provided externally. Cython now also disables some code intensive optimisations in that function to further reduce the code size. (Github issue :issue:
2102
)Decorating an async coroutine with
@cython.iterable_coroutine
changes its type at compile time to make it iterable. While this is not strictly in line with PEP-492, it improves the interoperability with old-style coroutines that useyield from
instead ofawait
.๐ The IPython magic has preliminary support for JupyterLab. (Github issue :issue:
1775
)๐ The new TSS C-API in CPython 3.7 is supported and has been backported. Patch by Naotoshi Seo. (Github issue :issue:
1932
)Cython knows the new
Py_tss_t
type defined in PEP-539 and automatically initialises variables declared with that type toPy_tss_NEEDS_INIT
, a value which cannot be used outside of static assignments.๐ The set methods
.remove()
and.discard()
are optimised. Patch by Antoine Pitrou. (Github issue :issue:2042
)dict.pop()
is optimised. Original patch by Antoine Pitrou. (Github issue :issue:2047
)Iteration over sets and frozensets is optimised. (Github issue :issue:
2048
)Safe integer loops (< range(230)) are automatically optimised into C loops.
alist.extend([a,b,c])
is optimised into sequentiallist.append()
calls for short literal sequences.Calls to builtin methods that are not specifically optimised into C-API calls now use a cache that avoids repeated lookups of the underlying C function. (Github issue :issue:
2054
)Single argument function calls can avoid the argument tuple creation in some cases.
Some redundant extension type checks are avoided.
Formatting C enum values in f-strings is faster, as well as some other special cases.
String formatting with the '%' operator is optimised into f-strings in simple cases.
Subscripting (item access) is faster in some cases.
Some
bytearray
operations have been optimised similar tobytes
.Some PEP-484/526 container type declarations are now considered for loop optimisations.
Indexing into memoryview slices with
view[i][j]
is now optimised intoview[i, j]
.Python compatible
cython.*
types can now be mixed with type declarations in Cython syntax.Name lookups in the module and in classes are faster.
Python attribute lookups on extension types without instance dict are faster.
๐ฆ Some missing signals were added to
libc/signal.pxd
. Patch by Jeroen Demeyer. (Github issue :issue:1914
)โ The warning about repeated extern declarations is now visible by default. (Github issue :issue:
1874
)๐ป The exception handling of the function types used by CPython's type slot functions was corrected to match the de-facto standard behaviour, so that code that uses them directly benefits from automatic and correct exception propagation. Patch by Jeroen Demeyer. (Github issue :issue:
1980
)Defining the macro
CYTHON_NO_PYINIT_EXPORT
will prevent the module init function from being exported as symbol, e.g. when linking modules statically in an embedding setup. Patch by AraHaan. (Github issue :issue:1944
)
๐ Bugs fixed
If a module name is explicitly provided for an
Extension()
that is compiled viacythonize()
, it was previously ignored and replaced by the source file name. It can now be used to override the target module name, e.g. for compiling prefixed accelerator modules from Python files. (Github issue :issue:2038
)The arguments of the
num_threads
parameter of parallel sections were not sufficiently validated and could lead to invalid C code. (Github issue :issue:1957
)๐ป Catching exceptions with a non-trivial exception pattern could call into CPython with a live exception set. This triggered incorrect behaviour and crashes, especially in CPython 3.7.
The signature of the special
__richcmp__()
method was corrected to recognise the type of the first argument asself
. It was previously treated as plain object, but CPython actually guarantees that it always has the correct type. Note: this can change the semantics of user code that previously relied onself
being untyped.Some Python 3 exceptions were not recognised as builtins when running Cython under Python 2.
Some async helper functions were not defined in the generated C code when compiling simple async code. (Github issue :issue:
2075
)Line tracing did not include generators and coroutines. (Github issue :issue:
1949
)C++ declarations for
unordered_map
were corrected. Patch by Michael Schatzow. (Github issue :issue:1484
)Iterator declarations in C++
deque
andvector
were corrected. Patch by Alex Huszagh. (Github issue :issue:1870
)The const modifiers in the C++
string
declarations were corrected, together with the coercion behaviour of string literals into C++ strings. (Github issue :issue:2132
)Some declaration types in
libc.limits
were corrected. Patch by Jeroen Demeyer. (Github issue :issue:2016
)@cython.final
was not accepted on Python classes with an@cython.cclass
decorator. (Github issue :issue:2040
)Cython no longer creates useless and incorrect
PyInstanceMethod
wrappers for methods in Python 3. Patch by Jeroen Demeyer. (Github issue :issue:2105
)The builtin
bytearray
type could not be used as base type of cdef classes. (Github issue :issue:2106
)
Other changes