Micro-optimize TypeTraverserVisitor by JukkaL · Pull Request #19459 · python/mypy

@JukkaL

Specialize for concrete sequence types (`list` and `tuple`) for faster
iteration, since the traversal code is very hot.

I used log tracing (#19457) to identify functions where
PyObject_GetIter was called frequently.

This is a aart of a set of micro-optimizations that improve self check
performance by ~5.5%.

JukkaL added a commit that referenced this pull request

Jul 16, 2025
Specialize a hot for loop for the concrete `tuple` and `list` types.
Also add a fast path for empty type arguments.

The approach is similar to what I used in #19459.

This is a part of a set of micro-optimizations that improve self check
performance by ~5.5%.

JukkaL added a commit that referenced this pull request

Jul 17, 2025
Specialize a hot for loop for the concrete `tuple` and `list` types.
Also add a fast path for empty type arguments.

The approach is similar to what I used in #19459.

This is a part of a set of micro-optimizations that improve self check
performance by ~5.5%.

JukkaL added a commit that referenced this pull request

Jul 18, 2025
Specialize iteration for the concrete types `list` and `tuple`, since
this is faster than iterating over an abstract iterable in compiled
code. Also avoid constructing many temporary lists.

Duplicate some very hot code in the hopes further improving performance
slightly, through inlining and possibly also better branch prediction.

The approach is similar to what I used in #19459.

This is a part of a set of micro-optimizations that improve self check
performance by ~5.5%.