es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creando una abstracción de registro basada en macros.

Mi proyecto es un marco de trabajo. En sí mismo realiza el registro con su propia implementación pero también debería poder utilizar una biblioteca de registro que el usuario elija para su aplicación.
Dado que las bibliotecas de registro como log4cl se basan en gran medida en macros, no estoy seguro de cómo lograr esto porque, según entiendo, las macros deben cargarse primero, antes que las funciones, etc.

Lo que se me ocurrió se basa en asdf. Proporciono un paquete simple que exporta símbolos como: lerror, lwarn, ldebug, etc., que deberían implementarse como macros que permitan realizar una implementación especial para log4cl u otras bibliotecas de registro.

Es decir, una implementación simple de registro que acompaña a mi marco de trabajo simplemente usa FORMAT y vuelca en *standard-output*.

El enfoque de asdf luego requiere crear sistemas. Uno para el archivo lisp que simplemente define el paquete con los símbolos exportados. Luego, otros sistemas, basados en el último, que proporcionan las implementaciones específicas como macros.
Luego, el usuario tendría que definir una secuencia de sistemas que deben especificarse antes del sistema del marco de trabajo actual para que el marco de trabajo ‘use’ una biblioteca de registro específica (que esté disponible para la fase de expansión de macros).

Si bien esto funciona, no estoy seguro de que sea el enfoque correcto. Parece bastante complicado. Si no tuviéramos que lidiar con macros, el enfoque simplemente sería definir funciones genéricas y proporcionar una implementación específica, pero no requerirían ser definidas primero.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en Common Lisp, mi recomendación para implementar el registro en un marco de trabajo es utilizar macros para las funciones de registro. Sin embargo, dado que las macros deben cargarse antes que otras funciones, podemos utilizar un enfoque basado en ASDF para resolver este problema.

    Para hacer esto, podemos proporcionar un paquete simple que exporte símbolos de registro como lerror, lwarn y ldebug como macros. Estas macros se pueden implementar de manera diferente según la biblioteca de registro elegida por el usuario, como log4cl.

    Además, podemos proporcionar una implementación básica de registro que utiliza FORMAT y vuelca la salida en *standard-output* para los usuarios que no desean utilizar una biblioteca de registro separada.

    Para implementar este enfoque, podemos crear múltiples sistemas utilizando ASDF. Un sistema definiría el paquete de registro con los símbolos exportados, mientras que los otros sistemas proporcionarían implementaciones de macros específicas para cada opción de biblioteca de registro.

    Luego, el usuario debería definir una secuencia de sistemas que se cargarán antes del sistema del marco de trabajo, asegurándose de que la biblioteca de registro adecuada esté disponible para la fase de expansión de macros.

    Si bien este enfoque puede parecer complicado, es una solución necesaria para trabajar con macros y bibliotecas de registro. Sin macros, se podrían utilizar funciones genéricas e implementaciones específicas sin necesidad de definirlas primero. Sin embargo, las macros proporcionan un método más potente para la implementación y personalización del registro.

Comments are closed.