Система модулей Lua основана на обычных таблицах, использует package.loaded для кеширования, package.preload для предзагрузки и package.searchers для расширения механизма require.
Fennel-компилятор интегрируется в систему поиска модулей Lua, что позволяет импортировать файлы .fnl как обычные Lua-модули.
Макросы в Fennel требуют отдельного модуля и специальных форм import-macros или require-macros, их нельзя экспортировать вместе с функциями обычным способом.
Чтобы объединить макросы и функции в одном файле, используют приём с init.fnl и init-macros.fnl и относительный require, передавая имя модуля через varargs.
Для внедрения зависимостей в единый файл применяют флаг --require-as-include и запись в package.preload; макросы вшивают через eval-compiler и запись в fennel.macro-loaded.
Сборка сложных библиотек реализована через специальные комментарии include и скрипт сборки, который встраивает и патчит исходники зависимостей.
Предложены улучшения макросистемы Fennel: убрать отдельные модули макросов, позволить макросам использовать функции из того же файла и автоматически квалифицировать символы при компиляции.
Get notified when new stories are published for "Hacker News 🇷🇺 Русский"