[Python-Dev] Python 2.3a1's mandatory use of cyclic GC causes existing applications to fail (original) (raw)

Thomas Heller theller@python.net
06 Feb 2003 20:25:52 +0100


Guido van Rossum <guido@python.org> writes:

> As a last remark (although this is too long already), > I'd also like to extend the slots syntax by the > ability to express "embedded types", like the types > supported by array. This again saves a lot of memory > when you know your attribute is always some simple type, > which need not become an object.

Can you suggest a concrete syntax to do this? Maybe setting slots to a dictionary mapping names to type specifiers would do it -- and it would even be backwards compatible: currently, if slots is a dict, its keys are used as slot names and its values are ignored, by virtue of the way the type constructor iterates over slots.

May I suggest to use an ordered sequence (of pairs) instead of a dict for slots. Then you also can completely control the layout that C code sees and construct C compatible structures or other data types from pure Python code.

Here's how ctypes does it: It's named _fields_ instead of __slots__, and typically you write something like this

class Point(Structure): fields = [("x", "i"), ("y", "i")]

which defines a Python objects having x and y instance vars, which must be integers.

ctypes extends this so that instead of the (struct module compatible) format specified "i", also Python objects are allowed which describe a C data type.

Thomas