First of all, Yes, please do it!
On Thu, Jul 20, 2017 at 8:24 PM, Ivan Levkivskyi email@example.com wrote:
I agree the start-up time is important. There is something that is related. ABCMeta is currently implemented in Python. This makes it slow, creation of an ABC is 2x slower than creation of a normal class.
Additionally, ABC infects by inheritance. When people use mix-in provided by collections.abc, the class is ABC even if it's concrete class.
There are no documented/recommended way to inherit from ABC class but not use ABCMeta.
However, ABCs are used by many medium and large size projects.
Many people having other language background uses ABC for Java's interface or Abstract Class.
So it may worth enough to have just Abstract, but not ABC. See https://mail.python.org/pipermail/python-ideas/2017-July/046495.html
Also, both abc and _collections_abc are imported at start-up (in particular importlib uses several ABCs, os also needs them for environments). Finally, all generics in typing module and user-defined generic types are ABCs (to allow interoperability with collections.abc).
Yes. Even if site.py doesn't use typing, many application and libraries will start using typing. And it's much slower than collections.abc.
My idea is to re-implement ABCMeta (and ingredients it depends on, like WeakSet) in C. I didn't find such proposal on b.p.o., I have two questions:
- Are there some potential problems with this idea (except that it may take
some time and effort)?
WeakSet should be cared specially. Maybe, ABCMeta can be optimized first.
Currently, ABCMeta use three WeakSets. But it can be delayed until `register` or `issubclass` is called. So even if WeakSet is implemented in Python, I think ABCMeta can be much faster.
- Is it something worth doing as an optimization?
(If answers are no and yes, then maybe I would spend part of my vacation in August on it.)