On 2017-12-15 16:36, Antoine Pitrou wrote:
On Fri, 15 Dec 2017 14:05:46 +0200
Serhiy Storchaka <storch...@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?
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to