Repository navigation
Open
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usagePerformance or resource usagetopic-C-APItopic-argument-clinictype-featureA feature request or enhancementA feature request or enhancement
Description
| BPO | 43447 |
|---|---|
| Nosy | @vstinner, @serhiy-storchaka, @corona10, @erlend-aasland, @kumaraditya303 |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = 'https://github.com/corona10'
closed_at = None
created_at = <Date 2021-03-09.11:34:23.944>
labels = ['expert-C-API', '3.10']
title = 'Generate vectorcall code to parse arguments using Argument Clinic'
updated_at = <Date 2022-03-06.09:38:05.594>
user = 'https://github.com/vstinner'bugs.python.org fields:
activity = <Date 2022-03-06.09:38:05.594>
actor = 'kumaraditya'
assignee = 'corona10'
closed = False
closed_date = None
closer = None
components = ['C API']
creation = <Date 2021-03-09.11:34:23.944>
creator = 'vstinner'
dependencies = []
files = []
hgrepos = []
issue_num = 43447
keywords = []
message_count = 2.0
messages = ['388354', '389214']
nosy_count = 5.0
nosy_names = ['vstinner', 'serhiy.storchaka', 'corona10', 'erlendaasland', 'kumaraditya']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = None
url = 'https://bugs.python.org/issue43447'
versions = ['Python 3.10']Linked PRs
- gh-87613: Argument Clinic vectorcall decorator #145381
- gh-87613: Use the AC vectorcall for float #158199
- gh-87613: Use AC vectorcall for float #158201
- gh-87613: Use AC vectorcall for bytes and bytearray #158891
- gh-87613: Use AC vectorcall for weakref.ref() #159470
- gh-87613: Use AC vectorcall for slice() #159471
- gh-87613: Allow Argument Clinic vectorcall on heap types #160115
- gh-87613: Use AC and AC vectorcall for bool #160791
- gh-87613: Use AC and AC vectorcall for filter #160792
- gh-87613: Name the subclass in Argument Clinic
__new__argument errors #160799 - gh-87613: Use AC VC for io.BytesIO #160855
- gh-87613: Reject deprecated parameters in AC VC #160857
- gh-87613: AC VC add support for *args and use it for zip #160944
- gh-87613: Pass NULL for an empty **kwargs in Argument Clinic #161382
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usagePerformance or resource usagetopic-C-APItopic-argument-clinictype-featureA feature request or enhancementA feature request or enhancement
Activity
vstinner commentedon Mar 9, 2021
To optimize the creation of objects, a lot of "tp_new" methods are defined twice: once in the legacy way (tp_new slot), once with the new VECTORCALL calling convention (tp_vectorcall slot). My concern is that the VECTORCALL implementation copy/paste most of the code just to parse arguments, whereas the specific code is just a few lines.
Example with the float type constructor:
--------------
Here the float_new() function (tp_new slot) is implemented with Argument Clinic: float_new() C code is generated from the [clinic input] DSL: good!
My concern is that float_vectorcall() code is hand written, it's boring to write and boring to maintain.
Would it be possible to add a new [clinic input] DSL for vectorcall? I expect something like that:
--------------
where float_vectorcall() C code would be generated, and float_vectorcall_impl() would be the only part written manually. float_vectorcall_impl() gets a clean API and its body is way simpler to write and to maintain!
corona10 commentedon Mar 21, 2021
I agree with we should update AC to generate vectorcall.
I am going to investigate what we can :)
vstinner commentedon Nov 3, 2022
I don't have the bandwidth to work on this issue, so I just close it.
89 remaining items
gh-87613: Use AC vectorcall for weakref.ref() (#159470)
cmaloney commentedon Oct 28, 2026
Devguide update: python/devguide#1948
pythongh-87613: Fold AC vectorcall *args tests into existing cases
pythongh-87613: Generate the AC @vectorcall helper in fastcall mode
pythongh-87613: Reuse the positional parser for AC **kwargs
pythongh-87613: Merge the inline AC vectorcall paths
pythongh-87613: Pick the AC **kwargs no-positional check with the con…
pythongh-87613: Declare the AC keyword parser locals in the conventio…
pythongh-87613: Warn on deprecated keywords passed to an AC vectorcall
pythongh-87613: Build the AC @vectorcall **kwargs dict inline
pythongh-87613: zip: Drop tuplesize local
gh-87613: Use AC vectorcall for slice() (#159471)
gh-87613: Use AC and AC vectorcall for bool (#160791)
gh-87613: AC VC add support for *args and use it for zip (#160944)
gh-87613: Use AC and AC vectorcall for filter (#160792)