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 _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel