[Python-Dev] Moving forward on the object memory API

Tim Peters tim.one@comcast.net
Mon, 01 Apr 2002 09:41:57 -0500


[Tim]
>> Read the tail end of the PyMem_ docs (PyMem_UPPERCASE is
>> supposedly already deprecated, but only in extension modules).

[martin@v.loewis.de]
> There is something wrong here, then.

That's for sure <wink>.

> The author of this documentation clearly meant that they are *internal*,
> and thus should have been called _PyMem_UPPERCASE.

I doubt the author meant that:  in 1.5.2, PyMem_DEL was the only "legal" way
to free object memory, and even if people didn't know that from reading the
docs, they picked it up via copying Python's Objects/xxmodule.c (which used
PyMem_DEL through revision 2.15).

> I'd be in favour of renaming them, thus actively breaking extension
> modules that use them at compile time.

That would break every extension type written for 1.5.2; the relevant ones
from Neil's random sampling are:

DB2-Python-0.991
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

DCOracle-1.3.1b1
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

Kinterbasdb
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

PyGreSQL-3.3-pre011203
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

avl-2.0
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

sybase-0.33
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

pysdl-0.0.7
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

pyshout-0.0.6
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

pwin
    Allocates with PyObject_NEW and deallocates with PyMem_DEL

I'm all in favor of deprecating PyMem_DEL, so long as deprecation doesn't
mean anything <wink -- but the sampling above tells me how seriously people
have taken the existing claim of deprecation>.

An alternative-- which no longer poses an implementation problem --is to say
that from 2.3 onward, PyMem_Del, PyMem_DEL, PyObject_Del, PyObject_DEL,
PyObject_FREE, and PyObject_Free, are all exactly the same thing (as has
always been true in reality, except when pymalloc was enabled in 2.2 or
before).  At least 4 of those spellings should be deprecated then, but
gently.  Whether PyMem_Free and PyMem_FREE also belong in that pile isn't
clear.