[Python-Dev] PEP: Adding data-type objects to Python
oliphant.travis at ieee.org
Tue Oct 31 21:13:25 CET 2006
Thomas Heller wrote:
> (I tried to read the whole thread again, but it is too large already.)
> There is a (badly named, probably) api to access information
> about ctypes types and instances of this type. The functions are
> PyObject_stgdict(obj) and PyType_stgdict(type). Both return a
> 'StgDictObject' instance or NULL if the funtion fails. This object
> is the ctypes' type object's __dict__.
> StgDictObject is a subclass of PyDictObject and has fields that
> carry information about the C type (alignment requirements, size in bytes,
> plus some other stuff). Also it contains several pointers to functions
> that implement (in C) struct-like functionality (packing/unpacking).
> Of course several of these fields can only be used for ctypes-specific
> purposes, for example a pointer to the ffi_type which is used when
> calling foreign functions, or the restype, argtypes, and errcheck fields
> which are only used when the type describes a function pointer.
> This mechanism is probably a hack because it'n not possible to add C accessible
> fields to type objects, on the other hand it is extensible (in principle, at least).
Thank you for the description. While I've studied the ctypes code, I
still don't understand the purposes beind all the data-structures.
Also, I really don't have an opinion about ctypes' implementation. All
my comparisons are simply being resistant to the "unexplained" idea that
I'm supposed to use ctypes objects in a way they weren't really designed
to be used.
For example, I'm pretty sure you were the one who made me aware that you
can't just extend the PyTypeObject. Instead you extended the tp_dict of
the Python typeObject to store some of the extra information that is
needed to describe a data-type like I'm proposing.
So, if you I'm just describing data-format information, why do I need
all this complexity (that makes ctypes implementation easier/more
natural/etc)? What if the StgDictObject is the Python data-format
object I'm talking about? It actually looks closer.
But, if all I want is the StgDictObject (or something like it), then why
should I pass around the whole type object?
This is all I'm saying to those that want me to use ctypes to describe
data-formats in the extended buffer protocol. I'm not trying to change
anything in ctypes.
More information about the Python-Dev