[Python-Dev] Extending types in C (original) (raw)
[Python-Dev] Extending types in C - help needed
Guido van Rossum guido@python.org
Wed, 06 Feb 2002 09:36:27 -0500
- Previous message: [Python-Dev] Extending types in C - help needed
- Next message: Half-baked idea (was Re: [Python-Dev] Extending types in C - help needed)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
> I wish I had time to explain this, but I don't. For now, you'll have > to read how types are initialized in typeobject.c -- maybe there's a > way, maybe there isn't. > > > Any tips about the route to take? > > It can be done easily dynamically.
I'm still struggling with this. How can it be done dynamically? My idea would be to realloc() the object after creation, adding a few bytes at the end. The problem is that I don't know how to find out about the object size without knowledge about the internals. The formula given in PEP 253 type->tpbasicsize + nitems * type->tpitemsize seems not to be valid any more (at least with CYCLE GC).
I have thought about this a little more and come to the conclusion that you cannot define a metaclass that creates type objects that have more C slots than the standard type object lay-out. It would be the same as trying to add a C slot to the instances of a string subtype: there's variable-length data at the end, and you cannot place anything before that variable-length data because all the C code that works with the base type knows where the variable length data start; you cannot place anything after that variable-lenth data because there's no way to address it from C.
The only way around this would be to duplicate all the code of type_new(), which I don't recommend because it will probably have to be changed for each Python version (even for bugfix releases).
A better solution is to store additional information in the dict.
--Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-Dev] Extending types in C - help needed
- Next message: Half-baked idea (was Re: [Python-Dev] Extending types in C - help needed)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]