New submission from Mark Shannon <m...@hotpy.org>:

We can remove the C stack use and general overhead of calling special methods 
implemented in Python for attribute access and indexing.

Each operation has a special method that implements it. When that special 
method is implemented in Python, we should avoid the `tp_xxx` slot machinery 
and use the same mechanism we use for normal calls to Python functions. 

* BINARY_SUBSCR: `__getitem__`
* STORE_SUBSCR: `__setitem__`
* LOAD_ATTR: `__getattribute__` (and maybe `__getattr__`)
* STORE_ATTR: `__setattr__`

It probably isn't worth bothering with the deletion forms.

The getters (`__getitem__` and `__getattribute__`) are relatively simple, as 
the call returns the result.

The setters are a bit more complicated as the return value needs to be 
discarded, so an additional frame which discards the result of the call needs 
to be inserted.

----------
assignee: Mark.Shannon
components: Interpreter Core
messages: 406461
nosy: Mark.Shannon, brandtbucher, pablogsal
priority: normal
severity: normal
status: open
title: Remove C stack use by specializing BINARY_SUBSCR, STORE_SUBSCR, 
LOAD_ATTR, and STORE_ATTR
type: performance
versions: Python 3.11

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45829>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to