[Python-Dev] PEP: Adding data-type objects to Python
Travis Oliphant
oliphant.travis at ieee.org
Tue Oct 31 02:58:28 CET 2006
Armin Rigo wrote:
> Hi Travis,
>
> 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.
Now:
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.
-Travis
More information about the Python-Dev
mailing list