[Python-Dev] New PEP: Using ssize_t as the index type
Armin Rigo
arigo at tunes.org
Thu Jan 5 20:45:38 CET 2006
Hi Martin,
On Fri, Dec 30, 2005 at 11:26:44AM +0100, "Martin v. L?wis" wrote:
> > Hum. It would be much cleaner to introduce a new format character to
> > replace '#' and deprecate '#'...
>
> That would certainly be clearer. What character would you suggest?
>
> I see two drawbacks with that approach:
> 1. writing backwards-compatible modules will become harder.
> Users have to put ifdefs around the ParseTuple calls (or atleast
> around the format strings)
Ok, I see your point.
In theory we could reuse a macro-based trick in C extensions:
#include <Python.h>
#ifndef Py_SIZE_CHR
typedef int Py_Ssize_t;
#define Py_SIZE_CHR "#"
#endif
And then we can replace -- say -- the format string "is#s#" with
"is" Py_SIZE_CHR "s" Py_SIZE_CHR
But it's rather cumbersome.
An equally strange alternative would be to start C modules like this:
#define Py_Ssize_t int /* compatibility with Python <= 2.4 */
#include <Python.h>
This would do the right thing for <= 2.4, using ints everywhere; and the
Python.h version 2.5 would detect the #define and assume it's a
2.5-compatible module, so it would override the #define with the real
thing *and* turn on the ssize_t interpretation of the '#' format
character.
Not that I think that this is a good idea. Just an idea.
I still don't like the idea of a magic #define that changes the behavior
of '#include <Python.h>', but I admit I don't find any better solution.
I suppose I'll just blame C.
A bientot,
Armin
More information about the Python-Dev
mailing list