You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add `@vectorcall` as a decorator to Argument Clinic (AC) which generates a new
[Vectorcall Protocol](https://docs.python.org/3/c-api/call.html#the-vectorcall-protocol)
argument parsing C function named `{}_vectorcall`. This is only supported for
`__new__` and `__init__` currently to simplify implementation.
The generated code has similar or better performance to existing hand-written
cases for `list`, `float`, `str`, `tuple`, `enumerate`, `reversed`, and `int`.
Using the decorator added vectorcall to `bytearray` and construction got
1.09x faster. For more details see the comments in gh-87613.
The `@vectorcall` decorator has two options:
- **zero_arg={C_FUNC}**: Some types, like `int`, can be called with zero
arguments and return an immortal object in that case. Adding a shortcut is
needed to match existing hand-written performance; provides an over 10%
performance change for those cases.
- **exact_only**: If the type is not an exact match delegate to the existing
non-vectorcall implementation. NEeded for `str` to get matching performance
while ensuring correct behavior.
Implementation details:
- Adds support for the new decorator with arguments in the AC DSL Parser
- Move keyword argument parsing generation from inline to a function so both
vectorcall, `vc_`, and existing can share code generation.
- Adds an `emit` helper to simplify code a bit from existing AC cases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
0 commit comments