[Python-Dev] Tagged integers (original) (raw)
Phillip J. Eby pje at telecommunity.com
Wed Jul 14 18:22:03 CEST 2004
- Previous message: [Python-Dev] Tagged integers
- Next message: [Python-Dev] Tagged integers
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
At 08:40 AM 7/14/04 -0700, Guido van Rossum wrote:
> I'd rather not like to see hackery like misused pointers > in the core, so you can count me as -1 on this.
-1000 here. In a past life (the ABC implementation) we used this and it was a horrible experience. Basically, there were too many places where you had to make sure you didn't have an integer before dereferencing a pointer, and finding the omissions one core dump at a time was a nightmare.
That certainly seems like it would be so, except... doesn't every bit of Python code that's doing anything other than accessing ob_type or ob_refcnt have to first check if ob_type is the type that code is looking for anyway?
And, don't the vast majority of accesses to ob_type and ob_refcnt occur inside Python core API macros and functions anyway?
If in addition to Mr. Knight's patch, ob_type and ob_refcnt were renamed so as to break any existing direct access in the core or extension modules, upgrading them to use Py_GETTYPE and Py_GETREF would be straightforward because one would "find the omissions" one compilation error at a time.
Further, renaming those fields to something like 'XXXusePy_GETTYPE_instead' would provide a built-in hint that you weren't supposed to use the field directly. :)
An additional trick: make it so that the macros for defining new object types still create an ob_type field, but let PyObject * point to the structure with the XXX fields. Thus, you can only access ob_type directly if you've already cast to a non PyObject * type. (i.e., you've already used an appropriate PyXXX_Check on that variable and would like to use it as a regular object now).
Naturally, the issues of portability and what impact Mr. Knight's approach has on non-integer code would need to be taken into consideration as well, but it seems to me that this approach could be made type-safe, at the cost of some initial pain to update the approximately 640 uses of 'ob_type' in the current source base.
- Previous message: [Python-Dev] Tagged integers
- Next message: [Python-Dev] Tagged integers
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]