Closed
Description
Right now it is implemented as:
Lines 14566 to 14583 in 79823c1
Removing unused defining_class: defining_class
from clinic has one big adavantage (aside from the fact that it is unused in the first place): it speeds up is_junction
call.
The exact benchmark is system-dependent, here are my numbers (note, that I am on macos and always get False
as the result).
Setup:
./configure --with-pydebug && make -j
- Install
pyperf
pyperf timeit --setup 'import os; d = os.scandir("."); d1 = next(d); d.close()' 'd1.is_junction()'
With defining_class
:
(.venv) ~/Desktop/cpython main ✔ 1 ⚠️
» pyperf timeit --setup 'import os; d = os.scandir("."); d1 = next(d); d.close()' 'd1.is_junction()'
.....................
Mean +- std dev: 46.1 ns +- 0.5 ns
Without:
(.venv) ~/Desktop/cpython main ✗
» pyperf timeit --setup 'import os; d = os.scandir("."); d1 = next(d); d.close()' 'd1.is_junction()'
.....................
Mean +- std dev: 25.0 ns +- 0.3 ns
This happens because is_junction
def is changed from METH_METHOD|METH_FASTCALL|METH_KEYWORDS
to METH_NOARGS
.
I have a PR ready.