[Python-Dev] New PEP: Using ssize_t as the index type
Tim Peters
tim.peters at gmail.com
Thu Dec 29 22:34:45 CET 2005
[Martin v. Löwis]
...
> PEP: XXX
> Title: Using ssize_t as the index type
+1, and for Python 2.5, and the sooner done the less painful for all.
Same concerns as Armin, where this is especially unattractive:
> 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.
Better to use a new gibberish character and deprecate the old one?
Otherwise I'm afraid we'll be stuck supporting PY_SIZE_T_CLEAN
forever, and it's not good to have the meaning of a format string
depend on the presence or absence of a #define far away in the file.
A suggestion:
...
> In these cases, three strategies are available:
>
> * statically determine that the size can never exceed an int
> (e.g. when taking the sizeof a struct, or the strlen of
> a file pathname). In this case, add a debug assert() that
> the value is indeed smaller than INT_MAX, and cast the
> value to int.
That can be done in one gulp via:
some_int = Py_SAFE_DOWNCAST(some_value, Py_ssize_t, int);
In a debug build that will assert-fail if some_value loses info when
cast from Py_ssize_t to int. If people had been careful, this would
already be in use when casting from size_t to int; there's even one
place in unicodeobject.c that does so ;-).
More information about the Python-Dev
mailing list