[Cython] PEP 3135 -- New Super
Stefan Behnel
stefan_ml at behnel.de
Tue Jul 5 09:00:49 CEST 2011
Vitja Makarov, 05.07.2011 08:21:
> I was thinking about implementing new super() with no arguments.
Please do :)
If you start working on it, please assign the ticket to you:
http://trac.cython.org/cython_trac/ticket/696
> The problem is where to store __class__, I see two options here:
>
> 1. Add func_class member to CyFunction, this way __class__ will be
> private and not visible for inner functions:
> 2. Put it into closure
The second option has the advantage of requiring the field only when
super() is used, whereas the first impacts all functions.
I would expect that programs commonly have a lot more functions than
specifically methods that use a no-argument call to super(), so this may
make a difference.
OTOH, not all methods have a closure, so creating one just to store the
"__class__" field is very wasteful, in terms of both runtime and memory
overhead. A lot more wasteful than paying 8 bytes of memory for each
function, with no additional time overhead.
> And I don't think that __class__ should be use somewhere outside super()
Agreed. CPython simply uses a compile time heuristic ("is there a function
call to something global named 'super'?") when creating this field, so it's
strictly reserved for this use case.
BTW, I like the irony in the fact that CPython essentially gives Cython
semantics to the "super" builtin here, by (partially) evaluating it at
compile time.
Stefan
More information about the cython-devel
mailing list