Re: [Cython] adding support for __dict__ in extension types
Bringing up this old post... On 21 June 2010 15:41, Robert Bradshaw <robertwb@math.washington.edu> wrote:
On Jun 17, 2010, at 9:31 AM, Lisandro Dalcin wrote:
If we special case a __dict__ attribute in extension types, i.e:
cdef class Foo: cdef dict __dict__
and fill type->tp_dictoffset, then we can support __dict__ in extension types.
What do you think?
Sounds like a good idea to me. Note that we check tp_dictoffset for fast dispatching for cpdef methods (which would be correct as a dict lookup *would* be needed if __dict__ is available).
I still have this patch lying around in my disk. I remember Stefan had some objections. For example, when the user ask for __dict__, a new dict is unconditionally created (in CPython, type dict are allocated on-demand). I propose to get this patch pushed now, and optimize later (however, I really don't know how to safely implement this optimization). -- Lisandro Dalcin --------------- CIMEC (INTEC/CONICET-UNL) Predio CONICET-Santa Fe Colectora RN 168 Km 472, Paraje El Pozo 3000 Santa Fe, Argentina Tel: +54-342-4511594 (ext 1011) Tel/Fax: +54-342-4511169
Lisandro Dalcin, 28.02.2011 17:33:
Bringing up this old post...
On 21 June 2010 15:41, Robert Bradshaw wrote:
On Jun 17, 2010, at 9:31 AM, Lisandro Dalcin wrote:
If we special case a __dict__ attribute in extension types, i.e:
cdef class Foo: cdef dict __dict__
and fill type->tp_dictoffset, then we can support __dict__ in extension types.
What do you think?
Sounds like a good idea to me. Note that we check tp_dictoffset for fast dispatching for cpdef methods (which would be correct as a dict lookup *would* be needed if __dict__ is available).
I still have this patch lying around in my disk. I remember Stefan had some objections. For example, when the user ask for __dict__, a new dict is unconditionally created (in CPython, type dict are allocated on-demand). I propose to get this patch pushed now, and optimize later (however, I really don't know how to safely implement this optimization).
For reference: http://thread.gmane.org/gmane.comp.python.cython.devel/10189 Stefan
On Mon, Feb 28, 2011 at 8:33 AM, Lisandro Dalcin <dalcinl@gmail.com> wrote:
Bringing up this old post...
On 21 June 2010 15:41, Robert Bradshaw <robertwb@math.washington.edu> wrote:
On Jun 17, 2010, at 9:31 AM, Lisandro Dalcin wrote:
If we special case a __dict__ attribute in extension types, i.e:
cdef class Foo: cdef dict __dict__
and fill type->tp_dictoffset, then we can support __dict__ in extension types.
What do you think?
Sounds like a good idea to me. Note that we check tp_dictoffset for fast dispatching for cpdef methods (which would be correct as a dict lookup *would* be needed if __dict__ is available).
I still have this patch lying around in my disk. I remember Stefan had some objections. For example, when the user ask for __dict__, a new dict is unconditionally created (in CPython, type dict are allocated on-demand). I propose to get this patch pushed now, and optimize later (however, I really don't know how to safely implement this optimization).
Note there's also the issue of cpdef methods--if the instance has a __dict__ then a dict lookup must be performed for every method call (to make sure it's not overridden). - Robert
On 28 February 2011 15:09, Robert Bradshaw <robertwb@math.washington.edu> wrote:
On Mon, Feb 28, 2011 at 8:33 AM, Lisandro Dalcin <dalcinl@gmail.com> wrote:
Bringing up this old post...
On 21 June 2010 15:41, Robert Bradshaw <robertwb@math.washington.edu> wrote:
On Jun 17, 2010, at 9:31 AM, Lisandro Dalcin wrote:
If we special case a __dict__ attribute in extension types, i.e:
cdef class Foo: cdef dict __dict__
and fill type->tp_dictoffset, then we can support __dict__ in extension types.
What do you think?
Sounds like a good idea to me. Note that we check tp_dictoffset for fast dispatching for cpdef methods (which would be correct as a dict lookup *would* be needed if __dict__ is available).
I still have this patch lying around in my disk. I remember Stefan had some objections. For example, when the user ask for __dict__, a new dict is unconditionally created (in CPython, type dict are allocated on-demand). I propose to get this patch pushed now, and optimize later (however, I really don't know how to safely implement this optimization).
Note there's also the issue of cpdef methods--if the instance has a __dict__ then a dict lookup must be performed for every method call (to make sure it's not overridden).
But if the type do have a __dict__, then tp_dictoffset will be filled (this is in my patch), and cpdef methods should always go the dict lookup... Am I missing something? Now that you mention it, my patch should include tests for all this. I'll work on that. -- Lisandro Dalcin --------------- CIMEC (INTEC/CONICET-UNL) Predio CONICET-Santa Fe Colectora RN 168 Km 472, Paraje El Pozo 3000 Santa Fe, Argentina Tel: +54-342-4511594 (ext 1011) Tel/Fax: +54-342-4511169
Lisandro Dalcin, 28.02.2011 19:45:
On 28 February 2011 15:09, Robert Bradshaw wrote:
On Mon, Feb 28, 2011 at 8:33 AM, Lisandro Dalcin wrote:
Bringing up this old post...
On 21 June 2010 15:41, Robert Bradshaw wrote:
On Jun 17, 2010, at 9:31 AM, Lisandro Dalcin wrote:
If we special case a __dict__ attribute in extension types, i.e:
cdef class Foo: cdef dict __dict__
and fill type->tp_dictoffset, then we can support __dict__ in extension types.
What do you think?
Sounds like a good idea to me. Note that we check tp_dictoffset for fast dispatching for cpdef methods (which would be correct as a dict lookup *would* be needed if __dict__ is available).
I still have this patch lying around in my disk. I remember Stefan had some objections. For example, when the user ask for __dict__, a new dict is unconditionally created (in CPython, type dict are allocated on-demand). I propose to get this patch pushed now, and optimize later (however, I really don't know how to safely implement this optimization).
Note there's also the issue of cpdef methods--if the instance has a __dict__ then a dict lookup must be performed for every method call (to make sure it's not overridden).
But if the type do have a __dict__, then tp_dictoffset will be filled (this is in my patch), and cpdef methods should always go the dict lookup... Am I missing something?
Now that you mention it, my patch should include tests for all this. I'll work on that.
Has anything come out of this? I also can't find a ticket for this, although it certainly is a worthy feature. Stefan
participants (3)
-
Lisandro Dalcin -
Robert Bradshaw -
Stefan Behnel