Fix slicing of PersistentList to always return instances of the same class. It was broken on Python 3 prior to 3.7.4.
Fix copying of PersistentList and PersistentMapping using copy.copy to also copy the underlying data object. This was broken prior to Python 3.7.4.
Update the handling of the PURE_PYTHON environment variable. Now, a value of "0" requires that the C extensions be used; any other non-empty value prevents the extensions from being used. Also, all C extensions are required together or none of them will be used. This prevents strange errors that arise from a mismatch of Python and C implementations. See issue 131.
Note that some private implementation details such as the names of the pure-Python implementations have changed.
Fix PersistentList to mark itself as changed after calling clear (if needed). See PR 115.
Fix PersistentMapping.update to accept keyword arguments like the native UserDict. Previously, most uses of keyword arguments resulted in TypeError; in the undocumented and extremely unlikely event of a single keyword argument called b that happens to be a dictionary, the behaviour will change. Also adjust the signatures of setdefault and pop to match the native version.
Fix PersistentList.clear, PersistentMapping.clear and PersistentMapping.popitem to no longer mark the object as changed if it was empty.
Add preliminary support for Python 3.9a3+. See issue 124.
Fix the Python implementation of the PickleCache to be able to store objects that cannot be weakly referenced. See issue 133.
Note that ctypes is required to use the Python implementation (except on PyPy).
Fully test the C implementation of the PickleCache, and fix discrepancies between it and the Python implementation:
See issue 102.
Allow sweeping cache without cache_size. cache_size_bytes works with cache_size=0, no need to set cache_size to a large value.
Require CFFI on CPython for pure-Python operation. This drops support for Jython (which was untested). See issue 77.
Fix DeprecationWarning about PY_SSIZE_T_CLEAN. See issue 108.
Drop support for Python 3.4.
Worked around test failure due to overflow to long on 32-bit systems.
Renamed TimeStamp extension module to avoid clash with pure-Python timestamp module on case-insensitive filesystems.
N.B: the canonical way to import the TimeStamp class is now:
from persistent.timestamp import TimeStamp
which will yield the class from the extension module (if available), falling back to the pure-Python reference implementation.