Cython

Latest version: v3.0.11

Safety actively analyzes 688007 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 17

3.1.0

==========================

Features added
--------------

* Support for freethreading builds of CPython 3.13 was added.
It comes with a new directive ``freethreading_compatible=True`` to mark modules as
free-threading compatible (``Py_mod_gil``).

https://github.com/cython/cython/issues?q=label%3A%22nogil+CPython%22

Patches by Lysandros Nikolaou and Nathan Goldbaum. (Github issue :issue:`6162`)

* Support for monitoring Cython modules via `sys.monitoring` in CPython 3.13+ was added.
For coverage reporting, this needs to be disabled with `-DCYTHON_USE_SYS_MONITORING=0`
as long as `coverage.py` does not support `sys.monitoring` for coverage plugins.
(Github issue :issue:`6144`)

* Many issues with the Limited C-API were resolved.
It is now sufficient to define the macro ``Py_LIMITED_API`` to activate the support.

https://github.com/cython/cython/issues?q=label%3A%22limited+api%22

* Support for GraalPython was improved (but is still incomplete).

* Several issues with the gdb support were resolved.
Patches by Kent Slaney. (Github issues :issue:`5955`, :issue:`5948`)

* ``typing.Union[SomeType, None]`` and ``SomeType | None`` are now understood and mean
the same as ``typing.Optional[SomeType]``, allowing ``None`` in type checks.
(Github issue :issue:`6254`)

* ``cython.const[]`` and ``cython.volatile[]`` are now available as type modifiers in Python code.
(Github issue :issue:`5728`)

* ``cython.pointer[SomeCType]`` can now be used to define pointer types in Python type annotations.
(Github issue :issue:`5071`)

* Several improvements were made to reduce the size of the resulting extension modules.
(Github issue :issue:`4425`)

* Function calls now use the PEP-590 Vectorcall protocol, even when passing keyword arguments.
(Github issues :issue:`5804`)

* Coroutines now use the ``am_send`` slot function instead of going through a Python ``.send()`` call.
This has been backported for Python 3.7 - 3.9.
(Github issues :issue:`4585`)

* ``__set_name__`` is called when assigning to class attributes.
(Github issue :issue:`6179`)

* Most builtin methods now provide their return type for type inference.
(Github issues :issue:`4829`, :issue:`5865`, :issue:`6412`)

* Method calls on builtin literal values are evaluated at compile time, if applicable.
(Github issue :issue:`6383`)

* The Python ``int`` type now maps directly to ``PyLong`` and is inferred accordingly.
(Github issue :issue:`4237`)

* Integer operations on known ``int`` types are faster.
(Github issue :issue:`5785`)

* f-strings are faster in some cases.
(Github issues :issue:`5866`, :issue:`6342`, :issue:`6383`)

* ``divmod()`` is faster on C integers.
Patch by Tong He. (Github issue :issue:`6073`)

* ``dict.pop()`` is faster in some cases.
(Github issue :issue:`5911`)

* ``.isprintable()`` is optimised for Unicode characters.
(Github issue :issue:`3277`)

* ``x in ()`` and similar tests against empty constant sequences (e.g. in generated code)
are now discarded if they have no side-effects.
(Github issue :issue:`6288`)

* Constant (non-GC) Python objects are no longer traversed with ``Py_VISIT()`` during GC runs.
(Github issue :issue:`6277`)

* C++ classes implemented in Cython can now use method overloading.
Patch by samaingw. (Github issue :issue:`3235`)

* Assigning a Python container to a C++ vector now makes use of ``__length_hint__``
to avoid reallocations.
Patch by Denis Lukianov. (Github issue :issue:`6077`)

* The C++11 ``emplace*`` methods were added to ``libcpp.deque``.
Patch by Somin An. (Github issue :issue:`6159`)

* ``cpython.time`` was updated and extended for Python 3.13.
(Github issue :issue:`6187`)

* Dataclasses support the ``match_args`` option.
(Github issue :issue:`5381`)

* Threading in parallel sections can now be disabled with a new ``use_threads_if`` condition.
(Github issue :issue:`5919`)

* New options ``warn.deprecated.DEF`` and ``warn.deprecated.IF`` can silence the deprecation warnings.
Patch by Eric Larson. (Github issue :issue:`6243`)

* ``cygdb`` shows more helpful output for some objects.
Patch by Kent Slaney. (Github issue :issue:`5958`)

* Bazel build support for improved.
Patch by mering. (Github issue :issue:`6452`)

* The parser was updated for Unicode 15.1 (as provided by CPython 3.13b4).

Bugs fixed
----------

* C functions used different start lines and columns for error reporting and tracing
than Python functions. They now use the line and column of their first decorator
or (if none) their definition line, as in Python.
(Github issue :issue:`6366`)

* Dataclasses did not handle default fields without init value correctly.
(Github issue :issue:`5858`)

* Implementing a special method based on another could lead to infinite recursion.
(Github issue :issue:`5863`)

* The ``__class__`` cell variable in methods was not always working as in Python.
Initial patch by Tom Keefe. (Github issue :issue:`2912`)

* Lambda functions had no code objects. Their signature can now be introspected.
(Github issue :issue:`2983`)

* Subtyping `complex` as extension type could fail.
(Github issue :issue:`6346`)

* ``hasattr()`` now propagates exceptions that occur during lookup.
(Github issue :issue:`6269`)

* The base type of extension heap types is now traversed during GC runs in Py3.9+.
(Github issue :issue:`4193`)

* The Python ``&`` operator could touch invalid memory with certain ``0`` values in Python <= 3.10.
Patch by Michael J. Sullivan. (Github issue :issue:`4193`)

* Exception values were not always recognised as equal at compile time.
(Github issue :issue:`5709`)

* Running Cython in different Python versions could generate slightly different C code
due to differences in the builtins.
(Github issue :issue:`5591`)

* The `common_include_dir` feature used different file paths in the C code on Windows and Posix.
It now uses forward slashes as directory separator consistently.
(Github issue :issue:`6355`)

* File paths in the C code are now relative to the build directory.
Patch by Oscar Benjamin. (Github issue :issue:`6341`)

* depfiles now use relative paths whenever possible.
Patch by Loïc Estève. (Github issue :issue:`6345`)

* The ``-a`` option in the IPython magic no longer copies the complete HTML document
into the notebook but only a more reasonable content snippet.
Patch by Min RK. (Github issue :issue:`5760`)

* Uselessly referring to C enums (not enum values) as Python objects is now rejected.
Patch by Vyas Ramasubramani. (Github issue :issue:`5638`)

* Cython no longer acquires the GIL during in-place assignments to C attributes in nogil sections.
Patch by Mads Ynddal. (Github issue :issue:`6407`)

* Several C++ warnings about ``char*`` casts were resolved.
(Github issues :issue:`5515`, :issue:`5847`)

* C++ undefined behaviour was fixed in an error handling case.
(Github issue :issue:`5278`)

* Dict assignments to struct members with reserved C/C++ names could generate invalid C code.

* The PEP-479 implementation could raise a visible ``RuntimeError`` without
a trace of the original ``StopIteration``.
(Github issue :issue:`5953`)

* A crash was fixed when assigning a zero-length slice to a memoryview.
Patch by Michael Man. (Github issue :issue:`6227`)

* Conditionally assigning to variables with the walrus operator could crash.
(Github issue :issue:`6094`)

* Unterminated string literals could lock up the build in an infinite loop.
(Github issue :issue:`5977`)

* Exporting C functions uses better platform compatible code.
(Github issue :issue:`4683`)

* The shebang in ``libpython.py`` was incorrect.
Patch by Luke Hamburg. (Github issue :issue:`6439`)

* Cython now uses `SHA-256` instead of `SHA-1` for caching etc. as the latter may not be
available on all Python installations.
(Github issue :issue:`6354`)

Other changes
-------------

* Support for Python 2.7 - 3.7 was removed, along with large chunks of legacy code.
(Github issue :issue:`2800`)

* The pxd files ``cpython.int``, ``cpython.cobject``, ``cpython.oldbuffer`` and ``cpython.string``
were removed as they refer to C-API declarations that are only in Python 2.x.
(Github issue :issue:`5870`)

* The generated C code now requires a C99 compatible C compiler.

* ``language_level=3`` is now the default.
``language_level=3str`` has become a legacy alias.
(Github issue :issue:`5827`)

* The Py2 types ``unicode`` and ``basestring`` are now deprecated and have become aliases
of the ``str`` type.
(Github issue :issue:`6374`)

* Docstrings now strip their leading whitespace according to PEP-257.
Patch by Lawrence Mitchell. (Github issue :issue:`6241`)

* Type checkers should have it easier to find and validate Cython types in .py files.
(Github issue :issue:`4327`)

* The previously shipped NumPy C-API declarations (``cimport numpy``) were removed.
NumPy has been providing version specific declarations for several versions now.
(Github issue :issue:`5842`)

* Usages of the outdated ``WITH_THREAD`` macro guard were removed.
(Github issue :issue:`5812`)

* The options for showing the C code line in Python exception stack traces were cleaned up.
Previously, disabling the option with the ``CYTHON_CLINE_IN_TRACEBACK`` macro did not
reduce the code overhead of the feature, and the ``c_line_in_traceback`` compile option
was partly redundant with the C macro switches and lead to warnings about unused code.
Since this is considered mostly a debug feature, the new default is that it is _disabled_
to avoid code and runtime overhead. It can be enabled by setting the C macro to 1, and
a new macro ``CYTHON_CLINE_IN_TRACEBACK_RUNTIME`` was added that controls the runtime
configurable setting if the feature is enabled, which was previously only available
through the compile option. The compile option is now deprecated (but still available),
and users should migrate to using the two C macros only.
(Github issue :issue:`6036`)

* Includes all fixes as of Cython 3.0.12 (but generates C99 code in some places).

3.0.12

===================

Bugs fixed
----------

* Release 3.0.11 introduced some incorrect ``noexcept`` warnings.
(Github issue :issue:`6335`)

* Conditional assignments to variables using the walrus operator could crash.
(Github issue :issue:`6094`)

* Dict assignments to struct members with reserved C names could generate invalid C code.

* Fused ctuples with the same entry types but different sizes could fail to compile.
(Github issue :issue:`6328`)

* In Py3, `pyximport` was not searching `sys.path` when looking for importable source files.
(Github issue :issue:`5615`)

3.0.11

===================

Features added
--------------

* The C++11 ``emplace*`` methods were added to ``libcpp.deque``.
Patch by Somin An. (Github issue :issue:`6159`)

Bugs fixed
----------

* The exception check value of functions declared in pxd files was not always applied in 3.0.10.
(Github issue :issue:`6122`)

* A crash on exception deallocations was fixed.
(Github issue :issue:`6022`)

* A crash was fixed when assigning a zero-length slice to a memoryview.
Patch by Michael Man. (Github issue :issue:`6227`)

* ``libcpp.optional.value()`` could crash if it raised a C++ exception.
Patch by Alexander Condello. (Github issue :issue:`6190`)

* The return type of ``str()`` was mishandled, leading to crashes with ``language_level=3``.
(Github issue :issue:`6166`)

* ``bytes.startswith/endswith()`` failed for non-bytes substrings (e.g. ``bytearray``).
(Github issue :issue:`6168`)

* Fused ctuples crashed Cython.
(Github issue :issue:`6068`)

* A compiler crash was fixed when using extension types in fused types.
(Github issue :issue:`6204`)

* The module cleanup code was incorrect for globally defined memory view slices.
(Github issue :issue:`6276`)

* Some adaptations were made to enable compilation in Python 3.13.
(Github issues :issue:`5997`, :issue:`6182`, :issue:`6251`)

3.0.10

===================

Bugs fixed
----------

* Cython generated incorrect self-casts when directly calling final methods of subtypes.
Patch by Lisandro Dalcin. (Github issue :issue:`2747`)

* Internal C names generated from C function signatures could become too long for MSVC.
(Github issue :issue:`6052`)

* The ``noexcept`` warnings could be misleading in some cases.
Patch by Gonzalo Tornaría. (Github issue :issue:`6087`)

* The ``cython.ufunc`` implementation could generate incomplete C code.
(Github issue :issue:`6064`)

* The ``libcpp.complex`` declarations could result in incorrect C++ code.
Patch by Raffi Enficiaud. (Github issue :issue:`6037`)

* Several tests were adapted to work with both NumPy 1.x and 2.0.
Patch by Matti Picus. (Github issues :issue:`6076`, :issue:`6100`)

* C compiler warnings when the freelist implementation is disabled (e.g. on PyPy) were fixed.
It can now be disabled explicitly with the C macro guard ``CYTHON_USE_FREELISTS=0``.
(Github issue :issue:`6099`)

* Some C macro guards for feature flags were missing from the NOGIL Python configuration.

* Some recently added builtins were unconditionally looked up at module import time
(if used by user code) that weren't available on all Python versions and could thus
fail the import.

* A performance hint regarding exported pxd declarations was improved.
(Github issue :issue:`6001`)

3.0.9

==================

Features added
--------------

* Assigning ``const`` values to non-const variables now issues a warning.
(Github issue :issue:`5639`)

* Using ``noexcept`` on a function returning Python objects now issues a warning.
(Github issue :issue:`5661`)

* Some C-API usage was updated for the upcoming CPython 3.13.
Patches by Victor Stinner et al. (Github issues :issue:`6003`, :issue:`6020`)

* The deprecated ``Py_UNICODE`` type is no longer used, unless required by user code.
(Github issue :issue:`5982`)

* ``std::string.replace()`` declarations were added to libcpp.string.
Patch by Kieran Geary. (Github issue :issue:`6037`)

Bugs fixed
----------

* Cython generates incorrect (but harmless) self-casts when directly calling
final methods of subtypes. Lacking a better solution, the errors that recent
gcc versions produce have been silenced for the time being.
Original patch by Michał Górny. (Github issue :issue:`2747`)

* Unused variable warnings about clineno were fixed when C lines in tracebacks are disabled.
(Github issue :issue:`6035`)

* Subclass deallocation of extern classes could crash if the base class uses GC.
Original patch by Jason Fried. (Github issue :issue:`5971`)

* Type checks for Python ``memoryview`` could use an invalid C function.
Patch by Xenia Lu. (Github issue :issue:`5988`)

* Calling final fused functions could generate invalid C code.
(Github issue :issue:`5989`)

* Declaring extern enums multiple times could generate invalid C code.
(Github issue :issue:`5905`)

* ``pyximport`` used relative paths incorrectly.
Patch by Stefano Rivera. (Github issue :issue:`5957`)

* Running Cython with globbing characters (``[]*?``) in the module search path could fail.
Patch by eewanco. (Github issue :issue:`5942`)

* Literal strings that include braces could change the C code indentation.

Other changes
-------------

* The "enum class not importable" warning is now only issued once per enum type.
(Github issue :issue:`5941`)

3.0.8

==================

Bugs fixed
----------

* Using ``const`` together with defined fused types could fail to compile.
(Github issue :issue:`5230`)

* A "use after free" bug was fixed in parallel sections.
(Github issue :issue:`5922`)

* Several types were not available as ``cython.*`` types in pure Python code.

* The generated code is now correct C89 again, removing some C++ style ``//`` comments
and C99-style declaration-after-code code ordering. This is still relevant for some
ols C compilers, specifically ones that match old Python 2.7 installations.

Page 1 of 17

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.