[Python-Dev] #ifdef __cplusplus? (original) (raw)

Adam Olsen rhamph at gmail.com
Fri Jan 2 08:26:25 CET 2009


On Thu, Jan 1, 2009 at 11:24 PM, Alexander Belopolsky <alexander.belopolsky at gmail.com> wrote:

On Fri, Jan 2, 2009 at 12:58 AM, Adam Olsen <rhamph at gmail.com> wrote: ..

As C++ has more specific ways of allocating memory, they impose this restriction to annoy you into using them. And so does Python API: see PyMemNEW and PyMemRESIZE macros.

An optional second API provides convenience, not annoyance. Besides, they're not used much anymore. I am curious what their history is though.

We won't be using them, and the extra casts and nothing but noise. A quick grep through the sources shows that these casts are not just nose: Objects/stringobject.c: op = (PyStringObject *)PyObjectMALLOC(.. Objects/typeobject.c: remain = (int *)PyMemMALLOC(.. Objects/unicodeobject.c: unicode->str = (PyUNICODE*) PyObjectMALLOC(.. in many cases the type of object being allocated is not obvious from the l.h.s. name. Redundant cast improves readability in these cases.

Python's malloc wrappers are pretty messy. Of your examples, only unicode->str isn't obvious what the result is, as the rest are local to that function. Even that is obvious when you glance at the line above, where the size is calculated using sizeof(Py_UNICODE).

If you're concerned about correctness then you'd do better eliminating the redundant malloc wrappers and giving them names that directly match what they can be used for.

If the size calculation bothers you you could include the semantics of the PyMem_New() API, which includes the cast you want. I've no opposition to including casts in a single place like that (and it would catch errors even with C compilation).

Figure out a way to turn off the warnings instead.

These are not warnings: these are compile errors in C++. A compiler which allows to suppress them would not be a standard compliant C++ compiler.

So long as the major compilers allow it I don't particularly care. Compiling as C++ is too obscure of a feature to warrant uglifying the code.

-- Adam Olsen, aka Rhamphoryncus



More information about the Python-Dev mailing list