[Python-Dev] New PEP: Using ssize_t as the index type
Armin Rigo
arigo at tunes.org
Thu Dec 29 18:30:41 CET 2005
Hi Martin,
On Thu, Dec 29, 2005 at 03:04:30PM +0100, "Martin v. L?wis" wrote:
> New conversion functions PyInt_FromSsize_t, PyInt_AsSsize_t,
> PyLong_AsSsize_t are introduced. PyInt_FromSsize_t will transparently
> return a long int object if the value exceeds the MAX_INT.
I guess you mean LONG_MAX instead of MAX_INT, in the event that ssize_t
is larger than a long. Also, distinguishing between PyInt_AsSsize_t()
and PyLong_AsSsize_t() doesn't seem to be useful (a quick look in your
branch makes me guess that they both accept an int or a long object
anyway).
> The conversion codes 's#' and 't#' will output Py_ssize_t
> if the macro PY_SIZE_T_CLEAN is defined before Python.h
> is included, and continue to output int if that macro
> isn't defined.
Hum. It would be much cleaner to introduce a new format character to
replace '#' and deprecate '#'...
> Compatibility with previous Python
> versions can be achieved with the test::
>> #if PY_VERSION_HEX < 0x02050000
> typedef int Py_ssize_t;
> #endif
>> and then using Py_ssize_t in the rest of the code.
Nice trick :-)
As far as I can tell you have done as much as possible to ensure
compatibility, short of adding new slots duplicating the existing ones
with the new signature -- which would make abstract.c/typeobject.c a
complete nightmare. I'm +1 on doing this in 2.5.
A bientot,
Armin
More information about the Python-Dev
mailing list