[Python-Dev] Accepting PEP 560 -- Core support for typing module and generic types

MRAB python at mrabarnett.plus.com
Fri Dec 15 14:47:23 EST 2017


On 2017-12-15 16:36, Antoine Pitrou wrote:
> On Fri, 15 Dec 2017 14:05:46 +0200
> Serhiy Storchaka <storchaka at gmail.com> wrote:
>> 15.12.17 04:00, Guido van Rossum пише:
>> > In the light of Antoine's and Stephan's feedback I think this can be 
>> > reconsidered -- while I want to take a cautious stance about resource 
>> > consumption I don't want to stand in the way of progress.  
>> 
>> I don't see any problems with implementing this on types defined in C. 
>> This isn't harder than implementing __sizeof__ or pickling support, and 
>> NumPy classes already have implemented both. Maybe Yury forgot about 
>> METH_STATIC and METH_CLASS?
>> 
>> The cost of adding new slots:
>> 
>> 1. Increased memory consumption. This increases the size of *every* 
>> class, even if they don't implement this feature.
>> 
>> 2. Increased class initialization time. For every class for every slot 
>> we need to look up corresponding methods in dictionaries of the class 
>> itself and all its parents (caching doesn't work fine at this stage). 
>> Significant part of class initialization time is spent on initializing 
>> slots. This will increase the startup time and the time of creating 
>> local classes. The relative overhead is more significant in Cython.
>> 
>> 3. We need to add a new type feature flag Py_TPFLAGS_HAVE_*. The number 
>> of possible flags is limited, and most bits already are used. We can add 
>> the limited number of new slots, and should not spent this resource 
>> without large need.
>> 
>> 4. Increased complexity. Currently the code related to PEP 560 is 
>> located in few places. With supporting new slots we will need to touch 
>> more delicate code not related directly to PEP 560. It is hard to review 
>> and to test such kind of changes. I can't guarantee the correctness.
> 
> These are all very good points (except #1 which I think is a red
> herring, see my posted example).  Do you have any general idea how to
> speed up class creation?
> 
Re the flags, could a flag be used to indicate that there are additional 
flags?


More information about the Python-Dev mailing list