Los desafíos y soluciones de las bibliotecas Fennel en un solo archivo
Este artículo profundiza en los desafíos de construir bibliotecas de un solo archivo en Fennel, un dialecto Lisp incrustado en Lua, particularmente las complejidades de manejar macros y funciones juntas. El autor disecciona meticulosamente el sistema de módulos de Lua, incluyendo la mecánica de `package.loaded`, `package.preload` y `package.searchers`, explicando cómo Fennel los aprovecha para compilar y cargar módulos. El núcleo del artículo se centra en resolver las limitaciones de las macros de Fennel, como la incapacidad de exportar macros directamente y la interdependencia entre macros. Se presenta una solución inteligente, utilizando `eval-compiler` y `relative-require` para empaquetar macros y funciones en un solo archivo, y abordando la carga de macros estableciendo manualmente la tabla `fennel.macro-loaded` durante la compilación. Finalmente, el autor describe mejoras futuras para el sistema de macros de Fennel, proponiendo la eliminación de módulos de macro, la carga directa de módulos completos durante la compilación y la adopción del enfoque de Clojure para resolver las dependencias de macros.