来源:Cython
浏览 485
扫码
分享
2020-04-04 08:24:51
0.17 (2012-09-01)
Features added
- Alpha quality support for compiling and running Cython generated extension modules in PyPy (through cpyext). Note that this requires at least PyPy 1.9 and in many cases also adaptations in user code, especially to avoid borrowed references when no owned reference is being held directly in C space (a reference in a Python list or dict is not enough, for example). See the documentation on porting Cython code to PyPy.
- “yield from” is supported (PEP 380) and a couple of minor problems with generators were fixed.
- C++ STL container classes automatically coerce from and to the equivalent Python container types on typed assignments and casts. Note that the data in the containers is copied during this conversion.
- C++ iterators can now be iterated over using “for x in cpp_container” whenever cpp_container has begin() and end() methods returning objects satisfying the iterator pattern (that is, it can be incremented, dereferenced, and compared (for non-equality)).
- cdef classes can now have C++ class members (provided a zero-argument constructor exists)
- A new cpython.array standard cimport file allows to efficiently talk to the stdlib array.array data type in Python 2. Since CPython does not export an official C-API for this module, it receives special casing by the compiler in order to avoid setup overhead on user side. In Python 3, both buffers and memory views on the array type already worked out of the box with earlier versions of Cython due to the native support for the buffer interface in the Py3 array module.
- Fast dict iteration is now enabled optimistically also for untyped variables when the common iteration methods are used.
- The unicode string processing code was adapted for the upcoming CPython 3.3 (PEP 393, new Unicode buffer layout).
- Buffer arguments and memory view arguments in Python functions can be declared “not None” to raise a TypeError on None input.
- c(p)def functions in pure mode can specify their return type with “@cython.returns()”.
- Automatic dispatch for fused functions with memoryview arguments
- Support newaxis indexing for memoryviews
- Support decorators for fused functions
Bugs fixed
- Old-style Py2 imports did not work reliably in Python 3.x and were broken in Python 3.3. Regardless of this fix, it’s generally best to be explicit about relative and global imports in Cython code because old-style imports have a higher overhead. To this end, “from future import absolute_import” is supported in Python/Cython 2.x code now (previous versions of Cython already used it when compiling Python 3 code).
- Stricter constraints on the “inline” and “final” modifiers. If your code does not compile due to this change, chances are these modifiers were previously being ignored by the compiler and can be removed without any performance regression.
- Exceptions are always instantiated while raising them (as in Python), instead of risking to instantiate them in potentially unsafe situations when they need to be handled or otherwise processed.
- locals() properly ignores names that do not have Python compatible types (including automatically inferred types).
- Some garbage collection issues of memory views were fixed.
- numpy.pxd compiles in Python 3 mode.
- Several C compiler warnings were fixed.
- Several bugs related to memoryviews and fused types were fixed.
- Several bug-fixes and improvements related to cythonize(), including ccache-style caching.
Other changes
- libc.string provides a convenience declaration for const uchar in addition to const char.
- User declared char* types are now recognised as such and auto-coerce to and from Python bytes strings.
- callable() and next() compile to more efficient C code.
- list.append() is faster on average.
- Modules generated by @cython.inline() are written into the directory pointed to by the environment variable CYTHON_CACHE_DIR if set.