[issue47067] Add vectorcall for generica alias object

penguin_wwy report at bugs.python.org
Sun Mar 20 11:04:25 EDT 2022


penguin_wwy <940375606 at qq.com> added the comment:

The point of bpo-40369 issue seems to be to provide vectorcall to the `GenericAliasType`, means vectorcall for `Queue[int]`

However, my idea is to add vectorcall to gaobject, like this:

```
d = dict[int]
d(a=1, b=2) <-- vectorcall
```

The idea came from my desire to implement different subclasses of a type when implementing some kind of factory model:

```
class ChildClassBuilder:
    ...

    def set_type(self, t: Type):
        self.t = t

    def build():
        instance = self.t()
        ...
        return instance
```

In the case of high type-hint coverage, the `self.t` is often a gaobject.

Benchmark example:
```
def test():
    d = dict[int]
    for _ in range(1000000):
        d(a=1, b=2)
```

Speedup 20% in my wsl2
```
opt:
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    1.728    1.728 <string>:1(<module>)
        1    1.728    1.728    1.728    1.728 test.py:4(test)

master:
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    2.271    2.271 <string>:1(<module>)
        1    2.271    2.271    2.271    2.271 test.py:4(test)
```

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue47067>
_______________________________________


More information about the Python-bugs-list mailing list