Os Desafios e Soluções de Bibliotecas Fennel em um Único Arquivo

Este artigo mergulha nos desafios de construir bibliotecas de arquivo único em Fennel, um dialeto Lisp embutido em Lua, especialmente as complexidades de lidar com macros e funções juntas. O autor disseca meticulosamente o sistema de módulos do Lua, incluindo a mecânica de `package.loaded`, `package.preload` e `package.searchers`, explicando como o Fennel os utiliza para compilar e carregar módulos. O cerne do artigo concentra-se em resolver as limitações das macros do Fennel, como a incapacidade de exportar macros diretamente e a interdependência entre macros. Uma solução inteligente é apresentada, utilizando `eval-compiler` e `relative-require` para empacotar macros e funções em um único arquivo, e abordando o carregamento de macros definindo manualmente a tabela `fennel.macro-loaded` durante a compilação. Finalmente, o autor descreve melhorias futuras para o sistema de macros do Fennel, propondo a remoção de módulos de macro, o carregamento direto de módulos inteiros durante a compilação e a adoção da abordagem do Clojure para resolver dependências de macros.
Leia mais