On Sun, Oct 24, 2021 at 6:03 AM Bluenix <bluenix...@gmail.com> wrote:
>
> 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  <songofaca...@gmail.com>
_______________________________________________
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/WHLQAVAXXXACUABGS2EJLYWU336ISZDD/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to