来源:Cython
浏览 635
扫码
分享
2020-04-04 08:23:28
3.0.0 (2020-??-??)
Features added
- Cython functions now use the PEP-590 vectorcall protocol in Py3.7+.Patch by Jeroen Demeyer. (Github issue #2263)
- Unicode identifiers are supported in Cython code (PEP 3131).Patch by David Woods. (Github issue #2601)
- Unicode module names and imports are supported.Patch by David Woods. (Github issue #3119)
- Annotations are no longer parsed, keeping them as strings following PEP-563.Patch by David Woods. (Github issue #3285)
- The
LIMITED_API
is supported by setting the CYTHON_LIMITED_API
C macro.Patches by Eddie Elizondo. (Github issue #3223, #3311) - The dispatch to fused functions is now linear in the number of arguments,which makes it much faster, often 2x or more, and several times faster forlarger fused types with many specialisations.Patch by will-ca. (Github issue #1385)
with gil/nogil
statements can be conditional based on compile-timeconstants, e.g. fused type checks.Patch by Noam Hershtig. (Github issue #2579)const
can be used together with fused types.Patch by Thomas Vincent. (Github issue #1772)- Reimports of already imported modules are substantially faster.(Github issue #2854)
- Positional-only arguments are supported in Python functions.Patch by Josh Tobin. (Github issue #2915)
- The
volatile
C modifier is supported in Cython code.Patch by Jeroen Demeyer. (Github issue #1667) @cython.trashcan(True)
can be used on an extension type to enable theCPython trashcan. This allows deallocating deeply recursive objects withoutoverflowing the stack. Patch by Jeroen Demeyer. (Github issue #2842)- Inlined properties can be defined for external extension types.Patch by Matti Picus. (Github issue #2640)
- The
str()
builtin now calls PyObject_Str()
instead of goingthrough a Python call.Patch by William Ayd. (Github issue #3279) - String concatenation can now happen in place if possible, by extending theexisting string rather than always creating a new one.Patch by David Woods. (Github issue #3453)
- Multiplication of Python numbers with small constant integers is faster.(Github issue #2808)
- Extension types that do not need their own
tp_new
implementation (becausethey have no object attributes etc.) directly inherit the implementation oftheir parent type if possible.(Github issue #1555) - The attributes
gen.gi_frame
and coro.cr_frame
of Cython compiledgenerators and coroutines now return an actual frame object for introspection.(Github issue #2306) - Several declarations in
cpython.
, libc.
and libcpp.*
were added.Patches by Jeroen Demeyer, Matthew Edwards, Chris Gyurgyik, Jerome Kieffer,Omer Ozarslan and Zackery Spytz.(Github issues #3468, #3358, #3332, #3179, #2891, #2826, #2713) - Deprecated NumPy API usages were removed from
numpy.pxd
.Patch by Matti Picus. (Github issue #3365) - The builtin
abs()
function can now be used on C numbers in nogil code.Patch by Elliott Sales de Andrade. (Github issue #2748) - PEP-479 (
generator_stop
) is now enabled by default with language level 3.(Github issue #2580) - The
cython.view.array
type supports inheritance.Patch by David Woods. (Github issue #3413) - Code annotation accepts a new debugging argument
—annotate-fullc
thatwill include the complete syntax highlighted C file in the HTML output.(Github issue #2855) —no-capture
added to runtests.py
to prevent stdout/stderr capturingduring srctree tests.Patch by Matti Picus. (Github issue #2701)—no-docstrings
option added to cythonize
script.Original patch by mo-han. (Github issue #2889)- The Pythran
shape
attribute is supported.Patch by Serge Guelton. (Github issue #3307) - The
@cython.binding
decorator is available in Python code.
Bugs fixed
- The unicode methods
.upper()
, .lower()
and .title()
wereincorrectly optimised for single character input values and only returnedthe first character if multiple characters should have been returned.They now use the original Python methods again. - Fused argument types were not correctly handled in type annotations and
cython.locals()
.Patch by David Woods. (Github issues #3391, #3142) - Diverging from the usual behaviour,
len(memoryview)
, len(char)
and len(Py_UNICODE
)
returned an unsigned size_t
value. They nowreturn a signed Py_ssize_t
, like other usages of len()
. - Nested dict literals in function call kwargs could incorrectly raise anerror about duplicate keyword arguments, which are allowed when passingthem from dict literals.(Github issue #2963)
- Item access (subscripting) with integer indices/keys always tried theSequence protocol before the Mapping protocol, which diverged from Pythonsemantics. It now passes through the Mapping protocol first when supported.(Github issue #1807)
- Name lookups in class bodies no longer go through an attribute lookup.Patch by Jeroen Demeyer. (Github issue #3100)
- Broadcast assignments to a multi-dimensional memory view slice could endup in the wrong places when the underlying memory view is known to becontiguous but the slice is not.(Github issue #2941)
- Pickling unbound methods of Python classes failed.Patch by Pierre Glaser. (Github issue #2972)
- The
Py_hash_t
type failed to accept arbitrary “index” values.(Github issue #2752) - The first function line number of functions with decorators pointed to thesignature line and not the first decorator line, as in Python.Patch by Felix Kohlgrüber. (Github issue #2536)
- Constant integer expressions that used a negative exponent were evaluatedas integer 0 instead of the expected float value.Patch by Kryštof Pilnáček. (Github issue #2133)
- The
cython.declare()
and cython.cast()
functions could fail in pure mode.Patch by Dmitry Shesterkin. (Github issue #3244) doc
was not available inside of the class body during class creation.(Github issue #1635)- Setting
language_level=2
in a file did not work if language_level=3
was enabled globally before.Patch by Jeroen Demeyer. (Github issue #2791) init.pyx
files were not always considered as package indicators.(Github issue #2665)- Compiling package
init
files could fail under Windows due to anundefined export symbol. (Github issue #2968) - A C compiler cast warning was resolved.Patch by Michael Buesch. (Github issue #2775)
- Binding staticmethods of Cython functions were not behaving like Python methods.Patch by Jeroen Demeyer. (Github issue #3106, #3102)
- Memoryviews failed to compile when the
cache_builtins
feature was disabled.Patch by David Woods. (Github issue #3406)
Other changes
- The default language level was changed to
3str
, i.e. Python 3 semantics,but with str
literals (also in Python 2.7). This is a backwards incompatiblechange from the previous default of Python 2 semantics. The previous behaviouris available through the directive language_level=2
. - Cython no longer generates
qualname
attributes for classes in Python2.x since they are problematic there and not correctly maintained for subclasses.Patch by Jeroen Demeyer. (Github issue #2772) - Source file fingerprinting now uses SHA-1 instead of MD5 since the lattertends to be slower and less widely supported these days.(Github issue #2790)
- The long deprecated include files
python_
, stdio
, stdlib
andstl
in Cython/Includes/Deprecated/
were removed. Use the libc.
and cpython.*
pxd modules instead.Patch by Jeroen Demeyer. (Github issue #2904) - The search order for include files was changed. Previously it was
include_directories
, Cython/Includes
, sys.path
. Now it isinclude_directories
, sys.path
, Cython/Includes
. This was done toallow third-party *.pxd
files to override the ones in Cython.Patch by Matti Picus. (Github issue #2905) - The command line parser was rewritten and modernised using
argparse
.Patch by Egor Dranischnikow. (Github issue #2952, #3001) - Dotted filenames for qualified module names (
pkg.mod.pyx
) are deprecated.Use the normal Python package directory layout instead.(Github issue #2686) - Support for Python 2.6 was removed.