Lambdaカクテル

京都在住Webエンジニアの日記です

Common LispのPackage-inferred-systemのサンプルリポジトリを公開した

github.com

作りました。

package-inferred-systemって何

簡単に言うと・・・

  • Common Lispではパッケージ名(言語上での名前空間)とモジュール(コンパイルする単位)とが分離しています
    • 言い換えると,同じファイルにパッケージを複数入れる,といったことができます
    • このため,パッケージ名からモジュールのパスを推測できません
  • このためビルドする際は手動でファイル同士の依存関係を記述するか,全て1つのでかいファイルに収める必要がありました
  • 規約としてパッケージ名とモジュール名とを1対1で対応付けたら依存関係書く必要ないじゃん,という発想で生まれたのがpackage-inferred-systemです

依存しているパッケージ名からビルドするべきファイル名が自明に定まるので,PerlのようにカジュアルにCommon Lispが書ける,というわけです。

package-inferred-systemむずかしい

あまり解説がないので使いこなすのが難しい状態でした。かれこれ2年ほど苦心していました。

なんでむずかしいのか

完全なサンプルがないからです。こう書いたら良いよ,というコードスニペットはあるにはあるのですが,入門者が使うにはかなり敷居が高いものになっていました。自己完結していて動作するサンプルプロジェクトを用意する必要がありました。

そこで今回github projectを作成し,動作するpackage-inferred-systemサンプルを公開しました。初学者の参考になれば幸いです。また,Common Lispプロジェクトの近代化*1の礎になればと思います。

感想

  • 後で困らないように,また応用しやすいように,コメントをちゃんと付けています。
  • デフォルトでは.asdファイルと同階層になってしまうソースファイルのパスをsrc/といった場所に移動させる:pathname機能というのがあるのですが,これがうまく動作したのが一番の喜びでした。

参考文献

t-cool.hateblo.jp

privet-kitty.github.io

*1:今風に扱えるようにする,とも言う