On Sun, Oct 24, 2021 at 6:03 AM Bluenix
Hmm, I thought I responded to this on Gmail but it hasn't appeared here on the archive so I'll send it again..
Is it known how much more/less the annotations impact performance compared to function defaults?
Basically, PEP 563 overhead is the same as function defaults.
* Function annotations are one constant tuple per function.
* Functions having the same signature share the same annotation tuple.
* No GC overhead because it is constant (not tracked by GC).
On the other hand, it is difficult to predicate PEP 649 overhead.
When namespace is not kept:
* Annotation is just a constant tuple too.
* No GC overhead too.
* The constant tuple will be slightly bigger than PEP 563. (It can be
the same as PEP 563 when all annotations are constant.)
* Although they are constant tuples, they may have their own names and
firstlineno. So it is difficult to share whole annotation data between
functions having the same signature. (*)
(*) I proposed to drop firstlineno and names to share more
annotations. See
https://github.com/larryhastings/co_annotations/pull/9
When namespace is kept:
* Annotations will be GC tracked objects.
* They will be heavier than the "namespace is not kept", for both of
startup time and memory consumption.
* They have some GC overhead.
To answer "how much more", we need a target application. But I don't
have a good target application for now.
Additionally, even if we have a good target application, it is still
difficult to estimate real future impact.
For example, SQLAlchemy has very heavy docstrings so the `-OO` option
has a big impact.
But SQLAlchemy doesn't use function annotations yet. So stock/PEP
563/PEP 649 have the same (zero) cost. Yay!
But if SQLAlchemy starts using annotations, *all applications* using
SQLAlchemy will be impacted in the future.
Regards,
--
Inada Naoki