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
