Robert Bradshaw wrote:
> On Apr 27, 2009, at 11:57 PM, Dag Sverre Seljebotn wrote:
> 
>> I got another idea for how using C++ objects without no-arg  
>> constructors
>> could work. It means enforcing C++ variable scoping through compile- 
>> time
>> errors, but keeping Python syntax.
> 
> I think for our first pass at least, we should allocate everything on  
> the heap. We could then try to (transparently?) move things to the  
> stack when we can (this would have implications for passing things  
> around though).

I agree to this.

If I understand you correctly it means that C++ classes would work very 
much like cdef classes (like in the wiki proposal).

Some further notes:

Passing things around shouldn't be such a problem; I don't think it 
would be much more complicated to do the heap allocation through a 
wrapper Python object (it could be opaque at first, only feature would 
be type-checking on coercion to a typed C++ class and perhaps store the 
C++ class name for its repr).

Conversion of "CppClass" (refcounted wrapper) to "CppClass*" could be 
allowed; but probably not the other way (at least without using a 
function saying whether ownership of the pointer should be taken over or 
not).

All of this *could* have been done for C structs as well, and in C++ 
there's no real distinction between a struct and a classes. I suppose a 
distinction must be done in Cython though because of code like

cdef MyStruct a, b
a.field = ...
b = a # copies value, not reference

(Note that the /only/ difference between the struct keyword and class 
keyword in C++ is whether private or public is the default visibility. A 
vtable is added if and only if a function is declared as virtual, 
whether it is declared as struct or not.)

See also the other discussion on methods in structs.

> What about
> 
> cdef CppObject a, b
> a = bar
> b = bar
> del a
> del b
> 
> ?

Yes, I thought of that after sending it.

-- 
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to