[Slabot-devel] Por qué es bueno que slabot haga uso de plug-ins

Gonzalo José Carracedo Carballal batchdrake at gmail.com
Sat Jun 23 17:24:35 CEST 2007


Voy a dar unas cuantas razones para ello:

a) Porque todos sabemos que un lenguaje script, por muy potente que
sea, es un lenguaje de script. Y va a estar limitado por su propia
definición. No quiero decir que yo me oponga a un lenguaje de
scripting, nada más lejos de la realidad.; sólo que puede haber cosas
que necesitemos implementar y que el script sea incapaz de hacer.

b) Más fácil de mantener. La gente puede enviarnos sus plug-ins en vez
de sus parches. Es más, esto es algo que llama mucho: A la gente le
gusta más programar de cero una mejora mediante unas reglas básicas
que empezar a rebuscar en el código para añadir una nueva
funcionalidad.

c) Nos obligaría a cuidar el código, flexibilizarlo, simplificarlo y,
en resumen, mejorarlo en calidad. Esto es una consecuencia de lo
primero: Si la gente quiere programar un plug-in / extensión es porque
no quiere leerse el código entero del robot, así que tendríamos que
cuidar las funciones, esperar bugs inesperables, suponer los métodos
del colaborador que quiera contribuír con su extensión, etcétera.

d) Por qué es fácil, qué demonios. Con dlopen/dlclose/dlsym/dlerror
tenemos todo lo que podamos necesitar.

Eso por una banda. Por otra, está la implementación de esta capacidad.

¿Cómo lo haríamos? Bueno, yo con pBot he tenido tiempo de evaluar los
problemas que más se presentan con los plug-ins, y yo propongo lo
siguiente:

Cada plug-in debería ser una biblioteca dinámico-compartida (*.so),
que ha de exportar una serie de símbolos equivalentes a todo esto:

- Nombre del plug-in: Una cadena de caracteres con un identificador
descriptivo (por ejemplo... "antifloood" o "chanlimit"), con el fin de
evitar la carga del mismo plug-in dos veces (estando, por ejemplo, el
fichero dinámico-compartido copiado con otro nombre en el mismo
directorio, o estando el mismo fichero en dos directorios de carga).

- Símbolo de carga: Una función que "prepare" el plug-in para
funcionar, en el momento de su carga. Así se podría hacer una función
que devolviese int, para saber si la carga es o no posible (por la
razón que sea).

- Símbolo de descarga: Lo mismo, un símbolo que desreferencie todos
esos recursos que pudiese haber reservado. Aunque, bien visto, esto se
podría sistematizar y llevarse a cabo por el propio slabot si
asignamos cada recurso interno al plug-in que lo solicite.

- Símbolo con comentarios y cualquier otra cosa que pudiese servir
para identificar el plug-in, describir su cometido, etcétera.

Esto es un esbozo, lo que a grandes rasgos debería ser un plug-in.
Obviamente, hay mucho que discutir sobre esto, pero como quien dice
esto todavía está saliendo del cascarón. De todas formas, la idea
queda ahí.

Saludos
-- 
>> BatchDrake



More information about the Slabot-devel mailing list