Having used the heap types extensively for JPype, I believe that converting all 
types too heap types would be a great benefit.  There are still minor rough 
spots in which a static type can do things that heap types cannot (such as you 
can derive a type which is marked final when it is static but not heap such as 
function).  But generally I found heap types to be much more flexible.   I 
found that heap types were better in concept than static but because the 
majority of the API (and the examples on using CAPI) were static the heap types 
paths were less exercised.   I eventually puzzled out most of the mysteries, 
but having the everything be the same (except for old static types that should 
be marked as immortal) likely has a lot of side benefits.   

Of course the other issue that I have with heap types is that they currently 
lack the concept of meta classes.   Thus there are things that you can do from 
the Python language that you can't do from the C API.  See...

https://bugs.python.org/issue42617

The downside of course is there are a lot of calls in the C API that infer that 
static type is fixed address.   Perhaps those call all be macros to the which 
equate to evaluating the address of the heap type.   

But that is just my 2 cents.

--Karl

-----Original Message-----
From: Neil Schemenauer <nas-pyt...@arctrix.com> 
Sent: Tuesday, January 12, 2021 10:17 AM
To: Victor Stinner <vstin...@python.org>
Cc: Python Dev <python-dev@python.org>
Subject: [Python-Dev] Re: Heap types (PyType_FromSpec) must fully implement the 
GC protocol

On 2021-01-12, Victor Stinner wrote:
> It seems like a safer approach is to continue the work on
> bpo-40077: "Convert static types to PyType_FromSpec()".

I agree that trying to convert static types is a good idea.  Another possible 
bonus might be that we can gain some performance by integrating garbage 
collection with the Python object memory allocator.  Static types frustrate 
that effort.

Could we have something easier to use than PyType_FromSpec(), for the purposes 
of coverting existing code?  I was thinking of something like:

    static PyTypeObject Foo_TypeStatic = {
    }
    static PyTypeObject *Foo_Type;

    PyInit_foo(void)
    {
        Foo_Type = PyType_FromStatic(&Foo_TypeStatic);
    }


The PyType_FromStatic() would return a new heap type, created by copying the 
static type.  The static type could be marked as being unusable (e.g. with a 
type flag).
_______________________________________________
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/RPG2TRQLONM2OCXKPVCIDKVLQOJR7EUU/
Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
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/DV4SPP2TTXGYMTMRMEO6TG5W7XPZKPXX/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to