On Jul 9, 2009, at 12:51 AM, Dag Sverre Seljebotn wrote:
> Greg Ewing wrote:
>> Dag Sverre Seljebotn wrote:
>>
>>> cdef extern from *:
>>> ctypedef rank("mylib", 3) smallint
>>> ctypedef rank("mylib", 4) largeint
>>
>> Do you have any use cases where that would actually
>> be helpful? I.e. where you don't know the exact types
>> but you are sure of their ranking, and knowing the
>> ranking is useful?
>
> I mentioned the C99 types which is such a case; they add at least
> three
> "rank-groups": int32_t and so on, int_least32_t and so on, and
> int_fast32_t and so on.
>
> Something very similar is going on in numpy.pxd (shipped with Cython),
> since the NumPy C headers go to great pains to define these in a
> cross-platform way (i.e. numpy.int32_t and so on is defined). In
> addition,
> numpy.pxd defines float32_t, float64_t, which AFAIK is not part of
> C99.
>
> Stefan Behnel wrote:
>> Dag Sverre Seljebotn wrote:
>>> cdef extern from *:
>>> ctypedef rank("mylib", 3) smallint
>>> ctypedef rank("mylib", 4) largeint
>>
>> ... looks like implementation detail leakage to me ...
>
> Hmm; all that is needed is a syntax though. Other alternatives:
>
> cdef extern from *:
> ctypedefgroup:
> int smallint
> int largerint
>
> or:
>
> cdef extern from *:
> ctypedef some int smallint
> ctypedef some int largerint
> ctyperelationship smallint < largerint
>
> or similar ideas, I believe the point is taken, although I don't like
> either of these concrete proposals.
The last is the best I've seen so far, but I'm still not a fan. Also,
rank will have to be a poset, not just an integer (which isn't too
bad). Would we want to special case literals, so x+2 still works even
if x's relationship to int is unknown?
- Robert
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev