On Tue, 12 Jan 2021 15:22:36 +0100
Petr Viktorin
On 1/11/21 5:26 PM, Victor Stinner wrote:
Hi,
There are multiple PEPs covering heap types. The latest one refers to other PEPs: PEP 630 "Isolating Extension Modules" by Petr Viktorin. https://www.python.org/dev/peps/pep-0630/#motivation
The use case is to embed multiple Python instances (interpreters) in the same application process, or to embed Python with multiple calls to Py_Initialize/Py_Finalize (sequentially, not in parallel). Static types are causing different issues for these use cases.
If a type is immutable and has no references to heap-allocated objects, it could stay as a static type. The issue is that very many types don't fit that. For example, if some method needs to raise a module-specific exception, that's a reference to a heap-allocated type, because custom exceptions generally aren't static.
Aren't we confusing two different things here? - a mutable *type*, i.e. a type with mutable state attached to itself (not to instances) - a mutable *instance*, where the mutable state is per-instance While it's very common for custom exceptions to have mutable instance state (e.g. a backend-specific error number), I can't think of any custom exception that has mutable state attached to the exception *type*.
Also, it's not possible to destroy static types at Python exit, which goes against the on-going effort to destroy all Python objects at exit (bpo-1635741).
I don't see why we would need to destroy immutable static objects. They don't need to be freed.
Right. Regards Antoine.