[Cython] C++ issue
Dag Sverre Seljebotn
dagss at student.matnat.uio.no
Thu Oct 23 11:25:25 CEST 2008
Dag Sverre Seljebotn wrote:
> Jackson Hoy Loper wrote:
>
>> stl iterators are still pretty much useless in cython, which seems
>> rather unfortunate.
>>
>> one Ravi Lanka brought up the basic issue this april... it's a matter
>> of initializing classes without default constructors. as far as i
>> know the issue is still unresolved (despite Greg Ewing's comment; see
>> below). do we expect this guy to get solved any time soon? it may
>> seem trivial, but scipy still uses STL, and unordered_map is the best
>> hash table support around right now...
>>
>> thoughts:
>>
>> 1) iterators don't have a constructor that takes no arguments, so
>> you can't ever say
>>
>> cdef STLiterator k # no constructor can be found
>>
>> 2) cython balks at taking the address of temporaries, so you can't
>> use pointers...
>>
>> cdef STLiterator *k
>> k=&(mySTLcontainer.begin()) # can't take address of non-lvalue
>>
>> 3) I see that Greg Ewing proposed declaring functions like
>> myhash.begin() "as though" they returned pointers, but I cannot
>> understand what this means. The function does not return a pointer,
>> and c++ notes this with due gravitas. Unless you have control over
>> the source code or want to write a shim, this will not work. It's a
>> dangerous idea, anyway, if I understand it correctly. It's a tragedy
>> that not everything is a pointer in this world, but it is also the
>> cold, cold reality... (until c++ tr1 goes through, anyway...)
>>
>> I'd be happy to take this on, as far as the code goes (though I
>> confess I haven't looked at the source yet). I'm not sure how
>> controversial this is, but I'm personally pretty clear that we should
>> put our declarations in the c code wherever they're declared in the
>> cython code. there's a pretty deep sense in which this is the "right"
>> answer. mixed code & declarations is officially kosher in C, too, as
>> of ISO C99. it's true, there are a few oldschool makefiles out there
>> compiling with -ansi -pedantic-errors, but -std=gnu99 has now nearly
>> tripled -ansi -pedantic-errors on google. And most of the hits for
>> the latter are about how it's causing everybody trouble and they're
>> going to drop it. I could well be wrong, but I really don't think
>> it's an issue, especially with the prevalence of distutils.
>>
>>
> Hi,
>
> better C++ support is something everybody wants, I think, it just isn't
> high enough on the priority list of the usual list of Cython
> contributors. So if you are willing to take it on as far as code goes
> I'm sure everybody is willing to see if something can be sorted out.
>
> I think the mixed code & declarations issue as such is pretty easy to
> handle (in the sense of conflicting with existing codebases) with a
> compiler directive/option. There already is a --cplus option for Cython
> which could turn this on.
>
> So a first step could thus be to start initializing variables at the
> point of the "cdef" statement if --cplus is turned on. I'm +1 for this
> myself.
>
I meant "...could be to start _declaring_ variables at the point of...".
Kind of important to get right in this context :-)
Dag Sverre
More information about the Cython-dev
mailing list