He estado jugando, escribiendo un pequeño marco IRC en C que ahora voy a expandir con algunas funcionalidades básicas, pero más allá de eso, me gustaría que sea extensible con complementos !Arquitectura de complementos en C usando libdl
Hasta ahora, cada vez que escribía algo relacionado con IRC (y escribí mucho, en aproximadamente 6 idiomas diferentes ahora ... ¡estoy en llamas!) Y en realidad seguí adelante para implementar una arquitectura de complemento, estaba dentro un lenguaje interpretado que tenía facilidades para hacer (leer: abusar) así que, como bloquear un archivo de script completo a través de eval
en Ruby (¡mal!).
¡Ahora quiero abusar de algo en C!
Básicamente hay tres cosas que podía hacer
- definir un lenguaje script sencillo dentro de mi programa
- utilizar una ya existente, la incorporación de un intérprete
- uso libdl para cargar * .so módulos en tiempo de ejecución
Me gusta el tercero y, si es posible, evito las otras dos opciones. Tal vez soy un masoquista de algún tipo, pero creo que podría ser divertido y útil para el aprendizaje.
Pensando lógicamente, la "cadena de dolor" obvia sería (de menor a mayor) 2 -> 1 -> 3, por la sencilla razón de que libdl está tratando con código sin procesar que puede (y explotará) en mi cara más a menudo que no.
Así que esta pregunta va para ustedes, usuarios de stackoverflow, ¿creen que libdl está a la altura de esta tarea, o incluso una idea realista?
Los cambios en la función principal son nulos; simplemente implementaría funciones como "on_channel_message (...)" -en otro pensamiento ... ¿pueden las bibliotecas cargadas con funciones de acceso libdl definirse en el programa principal? – LukeN
A veces pueden, pero es más seguro suponer que no (porque (a) a veces hay que pasar banderas de compilación especiales para habilitarlo, y (b) ¡generalmente no quiere que se mezclen con funciones arbitrarias en el programa principal!). Por lo general, lo mejor que se puede hacer es pasar una estructura que contiene una lista de indicadores de función que el complemento puede llamar. – psmears