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

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

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

더 보기
개발

Fennel에서 동적 스코프 구현: 영리한 접근 방식

2025-07-27
Fennel에서 동적 스코프 구현: 영리한 접근 방식

저자는 기본적으로 지원되지 않는 Lua 방언인 Fennel에서 동적 스코프를 구현하는 과제에 대해 다룹니다. 이 글에서는 Lua의 디버깅 라이브러리를 사용하여 함수 환경을 조작하거나 함수를 영리하게 복제하여 환경을 설정하는 등 여러 가지 접근 방식을 탐구합니다. 저자는 최종적으로 이 기능을 fennel-cljlib 라이브러리에 통합하지 않기로 결정했지만, Lua 함수 환경과 동적 스코프에 대한 심층적인 탐구와 다양한 구현 전략의 비교는 함수형 프로그래밍과 메타 프로그래밍 개념에 대한 귀중한 통찰력을 제공합니다.

더 보기

Emacs에서 Fennel 실행하기: 강력한 확장 기능

2025-07-23
Emacs에서 Fennel 실행하기: 강력한 확장 기능

이 글에서는 Emacs에서 Fennel(Lua 방언)을 실행할 수 있도록 해주는 Emacs 확장 기능 `require-fennel.el`을 소개합니다. Fennel REPL과 통신하여 Emacs Lisp와 Fennel 간의 데이터 변환 및 함수 호출을 가능하게 합니다. 저자는 Fennel 모듈 로드, Fennel 함수 호출, Emacs Lisp에서 Fennel 데이터 구조 사용 방법을 보여줍니다. 또한, 이 확장 기능은 Fennel에서 Emacs Lisp 함수를 호출하는 것도 지원하여 양방향 상호 작용을 가능하게 합니다. 개발자는 Fennel의 간결함과 Emacs의 강력한 기능을 활용하여 더욱 강력한 Emacs 환경을 구축할 수 있습니다.

더 보기
개발