On 12/03/2010 07:56 PM, Dag Sverre Seljebotn wrote:
> On 12/03/2010 07:53 PM, Stefan Behnel wrote:
>    
>> Lisandro Dalcin, 03.12.2010 19:39:
>>
>>      
>>> On 3 December 2010 15:10, Stefan Behnel wrote:
>>>
>>>        
>>>> I just implemented C access to the fields of CPython's builtin types like 
>>>> this:
>>>>
>>>>        cdef complex c = 1+2j
>>>>        c.real, c.imag = 10, 20
>>>>        print (c.real, c.imag)
>>>>
>>>> and then noticed that "real" and "imag" are actually read-only in Python.
>>>> So I wonder if we should disallow the above (i.e. raise a compiler error
>>>> during type analysis) and instead only allow this:
>>>>
>>>>        cdef complex c = 1+2j
>>>>        cval =&c.cval
>>>>        cval.real, cval.imag = 10, 20
>>>>        print (c.real, c.imag)
>>>>
>>>> (which also works now, BTW).
>>>>
>>>> Opinions?
>>>>
>>>>          
>>> No! No! No!
>>>
>>> In Python, you cannot assign to real or imag simply because the
>>> complex is immutable (like Python ints and floats). For C types,
>>> immutability does not apply!
>>>
>>>        
>> I understand that. However, I hope that you are talking about the builtin
>> Python complex type just like I am. Given that these two fields carry the
>>
>>      
> No. If you do "cdef complex c", what you have is a C complex type.
>
> How would you treat "cdef float complex c"? Python has no object for
> single precision complex.
>    

Ah...sorry, seems me and Lisandro skipped your first sentence. (And I 
was wrong, indeed "cdef complex c" is undefined in current Cython and 
available for this purpose.)

YES, for access to something that is an object, I do support immutability.

However, I do have a much bigger problem with the naming here. I find 
this very little user-friendly:

cdef complex x # x is Python object
cdef double complex x # same precision but in C
cdef float complex x # single precision in C

I really do feel that "int" has kind of set the precedent here, and that 
if only "complex" is made available it should be as "double complex" or 
similar.

We should find a consistent solution for this that works the same for 
complex and int and bool...

cdef __builtin__.int x
cdef __builtin__.complex x

or

cdef object int x
cdef object complex x

or something like that.

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

Reply via email to