단일 파일 Fennel 라이브러리의 과제와 해결책

이 글에서는 Lua에 내장된 Lisp 방언인 Fennel에서 단일 파일 라이브러리를 만드는 데 따르는 과제, 특히 매크로와 함수를 동시에 처리하는 복잡성에 대해 심층적으로 논의합니다. 저자는 `package.loaded`, `package.preload`, `package.searchers`와 같은 Lua 모듈 시스템의 작동 방식을 자세히 분석하여 Fennel이 모듈 컴파일 및 로드에 이를 어떻게 활용하는지 설명합니다. 이 글의 핵심은 매크로를 직접 내보낼 수 없거나 매크로 간 상호 의존성과 같은 Fennel 매크로의 제한을 해결하는 것입니다. `eval-compiler`와 `relative-require`를 사용하여 매크로와 함수를 단일 파일에 패키징하고 컴파일 시 `fennel.macro-loaded` 테이블을 수동으로 설정하여 매크로 로드 문제를 해결하는 영리한 방법을 제시합니다. 마지막으로 저자는 Fennel 매크로 시스템의 미래 개선 방향을 제시하며, 매크로 모듈 제거, 컴파일 시 전체 모듈의 직접 로드, 매크로 의존성 해결에 Clojure의 접근 방식을 채택할 것을 제안합니다.
더 보기