単一ファイルのFennelライブラリの課題と解決策

この記事では、Luaに埋め込まれたLisp方言であるFennelにおいて、単一ファイルのライブラリを作成することの課題、特にマクロと関数を同時に扱う際の複雑さについて掘り下げて説明しています。著者は、`package.loaded`、`package.preload`、`package.searchers`といったLuaのモジュールシステムの仕組みを綿密に分析し、Fennelがそれらをモジュールのコンパイルとロードにどのように活用しているかを解説しています。記事の中心は、マクロを直接エクスポートできないことや、マクロ間の相互依存性など、Fennelマクロの制限を解決することにあります。`eval-compiler`と`relative-require`を利用し、マクロと関数を単一ファイルにパッケージ化し、コンパイル時に`fennel.macro-loaded`テーブルを手動で設定することでマクロのロード問題に対処するという巧妙な解決策が提示されています。最後に、著者はFennelのマクロシステムの将来的な改善の方向性を示し、マクロモジュールの廃止、コンパイル時の完全なモジュールの直接ロード、マクロ依存性の解決にClojureのアプローチを採用することを提案しています。
続きを読む