On Tue, Oct 27, 2009 at 10:16 PM, Sturla Molden <stu...@molden.no> wrote: > Stéfan van der Walt skrev: >> >> As a side note, it may be safer to use the definitions of npy_intp and >> npy_uintp from the numpy header, rather than Py_ssize_t and Py_size_t. >> In some earlier versions of Python (e.g., 2.4), these were not the >> same. >> > No. You should use Py_ssize_t for indexing.
Where did Stefan mention anything about indexing? NumPy uses npy_intp* for defining array shapes, among other things.... > > The reason is that the C standard does not guarantee that sizeof(void*) > == sizeof(size_t), and there are platforms where this evaluates to > false. That is why Python core uses Py_ssize_t instead of Py_intptr_t > for indexing sequence types (cf. PEP 353). The Py_intptr_t/npy_intp is > long enough to hold a void*; the indexer should have the same size as > size_t, thus Py_ssize_t. > > The use of npy_intp as indexer in NumPy is a C coding error. It > accidentally works on computers with flat memory space, e.g. 32 bit x86 > and x64. Although platforms with flat memory are common, it should not > be encouraged. > >> Then, I also have a quick question: why is a person allowed to do >> >> cdef extern from something: >> ctypedef int Py_ssize_t >> >> when Py_ssize_t is not an int? Is this a Cython-specific idea? >> > Because it "behaves like an int", the only difference being the size. > But sizeof() is evaluated by the C compiler, which knows the true size > of int and Py_ssize_t. > > Sturla Molden > > _______________________________________________ > Cython-dev mailing list > Cython-dev@codespeak.net > http://codespeak.net/mailman/listinfo/cython-dev > _______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev