On Sat, 08 Oct 2011 16:54:06 +0200 "Martin v. Löwis" <martin@v.loewis.de> wrote:
I find the ad-hoc approach of declaring and initializing variables inadequate, in particular since it is difficult to clean up all those string objects at interpreter shutdown.
I propose to add an explicit API to deal with such identifiers.
That sounds like a good idea.
With this API,
tmp = PyObject_CallMethod(result, "update", "O", other);
would be replaced with
PyObject *tmp; Py_identifier(update); ... tmp = PyObject_CallMethodId(result, &PyId_update, "O", other);
Surely there is something missing to initialize the "const char *" in the structure? Or is "Py_identifier()" actually a macro?
string will be initialized by the compiler, next and object on first use. The new API for that will be
PyObject* PyUnicode_FromId(Py_Identifier*); PyObject* PyObject_CallMethodId(PyObject*, Py_Identifier*, char*, ...); PyObject* PyObject_GetAttrId(PyObject*, Py_Identifier*); int PyObject_SetAttrId(PyObject*, Py_Identifier*, PyObject*); int PyObject_HasAttrId(PyObject*, Py_Identifier*);
Do we want to make these APIs public? Regards Antoine.