On Tue, 23 Jun 2020 11:18:37 +0200 Victor Stinner <vstin...@python.org> wrote: > > Pseudo-code: > > void iterate(PyObject *obj) > { > PyObjectPP_View view; > > if (PyObjectPP_View_Get(&view, obj)) { > // fast-path: the object provides a PyObject** view > for (Py_ssize_t i=0; i < view.len; i++ { > PyObject *item = view.array[i]; > ... > } > PyObjectPP_View_Release(&view); > } > else { > // slow code path using PySequence_GetItem() or anything else > ... > }
It is quite cumbersome for extension code to have to re-implement all this by hand. Instead, it would be nice to have a "Visit" primitive so that one can write e.g.: void iterate(PyObject* obj) { Py_VisitObjectSequence([&](PyObject* item) { // ... }); } The above is a C++ lambda function (a closure, actually). The C spelling would be less nice, and you'd have to ensure that it is still performant (i.e., that the visitor is inlined inside the iteration loop - at least in release builds). (I called it Py_VisitObjectSequence so that you can also have Py_VisitIntSequence, Py_VisitFloatSequence, etc.) Regards Antoine. _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/4SWMGP54OWHE3CBW23NUP5KF4WK5R4UV/ Code of Conduct: http://python.org/psf/codeofconduct/