Stefan Behnel wrote:
> Dag Sverre Seljebotn, 25.01.2010 10:17:
>   
>> Stefan Behnel wrote:
>>     
>>>> [...] why not just represent a borrowed reference as a pointer?
>>>> So you could write
>>>>
>>>>      cdef list some_list = []
>>>>      cdef list* borrowed_ref = some_list
>>>>
>>>> and borrowed_ref would be a non-refcounted pointer to a Python list. 
>>>> Assignments back to a normal reference would be allowed:
>>>>
>>>>      cdef list my_list = borrowed_ref   # increfs the pointer
>>>>
>>>> After all, a non-refcounted reference to a Python object is not more than 
>>>> a 
>>>> bare pointer to a well-defined Python builtin/extension type (including 
>>>> "object*").
>>>>         
>> Well, there's the drawback of making the language more complicated, and 
>> also I think the notation is confusing -- plain "object" is not by 
>> value, and "object*" is not a pointer to an "object", so to speak.
>>     
>
> I was trying to let the syntax emphasise that it *is* a pointer, not a
> reference. A reference is special in Cython in that it handles ref-counting
> for it. A pointer just behaves like any other pointer in the language.
>
> I agree that it's not flawless, but I think it makes sense and is unambiguous.
>   
Let me put it this way: To me, "object*" somehow indicates PyObject**, 
since "object" is PyObject*. I find it confusing that "object" and 
"object*" are at the same "indirection level", so to speak.

Also, would

cdef object* x = ...
print x[0]

do a getitem on x, or returned a reference-counted copy of x? Not easy 
to guess from the syntax alone.

Assuming a getitem (as that's a useful operation and the other is 
already served by <object>x), one is then inconsistent with everywhere 
else the *-notation is used.

I'd be fine with almost any kind of syntax which is a superset of the 
current syntax -- "cdef nonmanaged object x", you name it. The problem 
with "object*" is that it is not immediately obvious to a reader with a 
brief knowledge of Cython that it is fundamentally different from "int*".

This is a very subjective matter though.

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

Reply via email to