On Tue, Jan 12, 2021 at 3:28 PM Petr Viktorin <encu...@gmail.com> wrote: > 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. > (...) > I don't see why we would need to destroy immutable static objects. They > don't need to be freed.
I'm not sure of your definition of "immutable" here. At the C level, many immutable Python objects are mutable. For example, a str instance *can* be modified with the C level, and computing hash(<my string>) modifies the object as well (the internal cached hash value). Any type contains at least one Python object: the __mro__ tuple. Most types also contain a __subclass__ dictionary (by default, it's NULL). These objects are created at Python startup, but not destroyed at Python exit. See also tp_bases (tuple) and tp_dict (dict). I tried once to "finalize" static types, but it didn't go well: * https://github.com/python/cpython/pull/20763 * https://bugs.python.org/issue1635741#msg371119 It doesn't look to be safe to clear static types. Many functions rely on the fact that static types are "always there" and are never finalized. Also, only a few static types are cleared by my PR: many static types are left unchanged. For example, static types of the _io module. It seems like a safer approach is to continue the work on bpo-40077: "Convert static types to PyType_FromSpec()". Victor -- Night gathers, and now my watch begins. It shall not end until my death. _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/OMDNS54ZVOAMJALDCFB7IVD26WF47WB4/ Code of Conduct: http://python.org/psf/codeofconduct/