Armin Rigo wrote:
On Fri, Oct 27, 2006 at 02:05:31PM -0600, Travis E. Oliphant wrote:
This PEP proposes adapting the data-type objects from NumPy for inclusion in standard Python, to provide a consistent and standard way to discuss the format of binary data.
How does this compare with ctypes? Do we really need yet another, incompatible way to describe C-like data structures in the standarde library?
There is a lot of subtlety in the details that IMHO clouds the central issue which I will try to clarify here the way I see it.
First of all:
In order to make sense of the data-format object that I'm proposing you have to see the need to share information about data-format through an extended buffer protocol (which I will be proposing soon). I'm not going to try to argue that right now because there are a lot of people who can do that.
So, I'm going to assume that you see the need for it. If you don't, then just suspend concern about that for the moment. There are a lot of us who really see the need for it.
To describe data-formats ctypes uses a Python type-object defined for every data-format you might need.
In my view this is an 'over-use' of the type-object and in fact, to be useful, requires the definition of a meta-type that carries the relevant additions to the type-object that are needed to describe data (like function pointers to get data in and out of Python objects).
My view is that it is un-necessary to use a different type object to describe each different data-type.
The route I'm proposing is to define (in C) a *single* new Python type (called a data-format type) that carries the information needed to describe a chunk of memory.
In this way *instances* of this new type define data-formats.
In ctypes *instances* of the "meta-type" (i.e. new types) define data-formats (actually I'm not sure if all the new c-types are derived from the same meta-type).
So, the big difference is that I think data-formats should be *instances* of a single type. There is no need to define a Python type-object for every single data-type. In fact, not only is there no need, it makes the extended buffer protocol I'm proposing even more difficult to use and explain.
Again, my real purpose is the extended buffer protocol. These data-format type is a means to that end. If the consensus is that nobody sees a greater use of the data-format type beyond the buffer protocol, then I will just write 1 PEP for the extended buffer protocol.