[Python-Dev] Type of range object members

Alexander Belopolsky alexander.belopolsky at gmail.com
Tue Aug 15 04:08:19 CEST 2006


On Aug 14, 2006, at 7:32 PM, Guido van Rossum wrote:

> Methinks that as long as PyIntObject uses long (see intobject.h)
> there's no point in changing this to long.

I guess you meant "changing this to Py_ssize_t ".  I don't understand  
why the type used by PyIntObject is relevant here.  Range object's  
"start" is logically  an index, but int object's "ob_ival" is not.    
Since PyIntObject's is definition is exposed by Python.h, changing  
the type of ob_ival will probably break a lot of code.  This  
reasoning does not apply to the range object.

Since on most platforms ssize_t is the same as long, the choice  
between the two is just a matter of self-documenting code.  Speaking  
of which, I find it unfortunate that the name Py_ssize_t was selected  
for the typedef.  I would prefer Py_index_t.  The first time I saw  
Py_ssize_t, I did not notice the double 's' and thought it was an  
unsigned type.  On the second look, I've realized that it is signed  
and started wondering why not ptrdiff_t.  I understand that ssize_t  
is defined by POSIX as the return type of functions such as "read"  
that can return either size or -1 for error.  I don't think POSIX  
mandates sizeof(size_t) == sizeof(ssize_t), but I may be wrong.   I  
would agree that ptrdiff_t, although standard C, is not a very  
intuitive name, but ssize_t is even less clear. 


More information about the Python-Dev mailing list