perf: drop _Version NamedTuple #995
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
NamedTuples are expensive. This one line sticks out in the flame graph from 3.15's profiler. Dropping the
_Versionnamed tuple speeds upVersioncreation, taking 20% less time; it also simplifies the code a bit. Since we already provide read-only indirection for all the attributes (and I assume the NamedTuple was to ensure the values were not mutable), this remains safe.We could provide a backward compatibility property
_versionattribute that generates this NamedTuple (and even a setter to be perfectly backward compatible), though if we did that I'd like to also have it generate a deprecation warning; no one should be using our internals ideally. :)Versioncreation is a key part ofSpecifierSetcreation too, I was noticing this line on the flame graph forSpecifierSet.