agregar un campo a object - ex [id de objetos]

Milton Galo Patricio Inostroza Aguilera minoztro en gmail.com
Jue Mayo 1 01:02:27 CEST 2008


Estimados:

   Hace ya un tiempo que estoy construyendo un depurador omnisciente
[1] para python.  Todo ha ido de maravillas hasta que me he topado con
el siguiente requerimiento:

* Cada objeto que se cree deberá tener un identificador único dentro
del programa

De buenas a primeras pensé en la funcion id(), pero como ya se
discutió anteriormente en esta lista y leyendo la documentación
oficial, la funcion id() no garantiza repetir el id para diferentes
objetos (considerando obviamente que el objeto que antes tenia ese id
ya no existe y fue destruido por el gc, entonces el sistema podría
asignar ese id a un nuevo objeto que se construya).

Consultando en el canal en español y en ingles de python, he recibido
bastantes criticas por lo que deseo hacer y en realidad no he recibido
demasiadas ayudas, exceptuando a Mario y Chema.

Es por lo anterior que deseo me guíen para poder realizar lo que
quiero: agregar un atributo a la clase object que esta escrita en el
archivo object.c para que cada objeto que herede de éste tenga ese
atributo especial, que en mi caso sera un identificador único.

El asunto del identificador único no es sólo un capricho si no que es
necesario para poder mantener siempre una identificación de cada
objeto que esta cambiando y de que forma lo esta haciendo,
independientemente si ese objeto es destruido la idea es poder
mantener su historial.

Bueno como todo parte por casa me he imprimido el python/C API
Reference Manual y Extending and Embedding the Python Interpreter y
pretendo leerlos.

Agradecería mucho cualquier ayuda de ustedes...quizás estoy equivocado
al querer modificar la implementación de object...esto ya es un mundo
nuevo para mi y necesito el apoyo y orientación de ustedes, espero
comentarios, saludos

Ejemplo de lo que necesito:

1 def fun():
2     a = [] #
3     a.append(3)

lo que hace el depurador hasta el momento es:

1) detecta el call de fun, para esto utilizo settrace
    1) se registra la funcion
    2) se inspecciona el bytecode del frame a través de frame.f_code
    3) se crea un mapa del bytecode con los índices para poder manejar
los cambios del f_lasti

2) detecta la linea 2 a través del evento line del settrace
    2.1) se pregunta en el mapa creado, por el f_lasti actual si es
que en la anterior instrucción se encontró un store_fast,
           de ser así, se registra el nombre de la variable local y
luego si id = numero que esta en el bytecode que es la posición que
ocupa en co_varnames {acá aun no se toma en cuenta las variables
libres y las que están ligadas}
    2.2) registra la variable local
    2.3) Se detecta una modificación en el valor de la variable local
a, entonces se registra ese evento y se debe enviar el nuevo valor de
la variable a.  Si el valor es un int, string, float, etc podemos
mandar el valor solamente....pero si es una lista, tupla u otro objeto
no puedo enviar el valor si no que el identificador único que se debe
generar al momento de construir en este caso el objeto lista.
settrace no captura la construcción de una lista y eso me parece
razonable ya que creo que esos son objetos y eventos internos del
lenguaje.  Acá reside el problema del id único para ese tipo de
objetos.
   2.4) en la linea 3 existe otro problema parecido ya que no soy
notificado a través de settrace del llamado de esa función, pero creo
que debo ir de un problema a la vez.

Es importante señalar que cuando hablo de registrar o registrar la
modificación de una variable, en realidad lo que se esta haciendo es
enviar a través de un socket utilizando la librería xdrlib los datos a
una aplicación escrita en Java que se llama TOD {Trace-Oriented
Debugger} [2] que es un depurador omnisciente escrito en
Java..entonces estamos aprovechando la base de datos que se implementó
en ese proyecto para registrar nuestros datos.

Bueno no me quiero extender más....espero haberme explicado, saludos y
gracias por la ayuda


[1] http://www.lambdacs.com/debugger/
[2] http://pleiad.dcc.uchile.cl/research/software/tod
-- 
Milton Inostroza Aguilera
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es