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

Christian Tismer tismer@tismer.com
Thu, 06 Feb 2003 20:46:33 +0100


Thomas Heller wrote:

[extending __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.

Huh, are you fast!
I was about to propose exactly this same thing:
If we deal with flat types, then we also can
define their precise layout.

Using a dict would anyway be nicer to read,
because the colons are quite illustrative.
For literal dicts, it would be imaginable to
hook into the build_dict and grab the objects
from the stack in order...
...I see Guido's head shaking :-)

Another way would be not to go away from __slots__ as
a simple list, but allow to use structure objects
with the necessary attribute like name, type, whatever
instead of the name strings. This could go as far as
to also allow redefining getters and setters at the same
time.

Is this going too far?
Am I re-inventing something like CTypes?

At first thought, I'd stick with [(name, type), ...], just
to get things started.

> <plug>
> 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.

</plug>

What would this C data type be? Other structs as well,
or only atomic types? Do you think of even specifying
(name, bitsize, alignment), or is this overdone?

ciao - chris

-- 
Christian Tismer             :^)   <mailto:tismer@tismer.com>
Mission Impossible 5oftware  :     Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a     :    *Starship* http://starship.python.net/
14109 Berlin                 :     PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34  home +49 30 802 86 56  pager +49 173 24 18 776
PGP 0x57F3BF04       9064 F4E1 D754 C2FF 1619  305B C09C 5A3B 57F3 BF04
      whom do you want to sponsor today?   http://www.stackless.com/