新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

asdf を久々に使う

common lisp の環境も関係者の努力によっていろんなツールが着々とバージョンアップを重ねているらしく、しらないうちに adsf も version 3.0 になった。3年以上前のようだが、、、 ドキュメントも充実し始めているので、もはや断片的に誰かの blog や書き残し(多分古い情報だ)をみるより本家を見た用がよい。そのうちこの blog も古くなる。 日本語の(非公式らしい)訳があるので参考になる。

Top (ASDF マニュアル)

2014 と少し古いようが keens さんの blog も参考になる。

require, ASDF, quicklispを正しく使う | κeenのHappy Hacκing Blog

まず version 2.0 のスタイル asdf:central-registry は使わない。後方互換もあるようなので使っても構わないが、3.0 以降では非推奨だ。

ubuntu では簡単に apt install cl-asdf でインストールできる。そうすると、/usr/share/common-lisp/ にインストールされる。source と systems があるが systems は古いスタイルようなので無視する(asdシンボリックリンクがある)。source が対象になる。asdf は /usr/share/common-lisp/cl-asdf にあり、さらに自動的に build ディレクトリの下に asdf.lisp があるはずだ。これを load すれば以後 asdf が使える。よかったよかった。

clisp では

#-:asdf (load "/usr/share/common-lisp/source/cl-asdf/asdf.lisp")

と書けばいいだろう。これで asdf が使える。asdf:asdf-version でバージョンを確認しよう。

[1]> (asdf:asdf-version)
"3.3.1"

つぎに追加のディレクトリ。

ASDFがシステムを見つけられるように設定する (ASDF マニュアル) にあるように、

  • ~/common-lisp/
  • ~/.local/share/common-lisp/source/

のいずれかにソースを置くようにする。そうすると自動的に検索対象になるようだ。追加の為には

~/.config/common-lisp/source-registry.conf.d/

に 50-luser-lisp.conf などと conf の拡張子のあるファイルを置いていく。私は、keens さんを参考に3つのパスを通した。

> ls
10-systems.conf  20-ryos.conf  30-quicklisp.conf
> cat *
(:tree "/usr/share/common-lisp/source/")
(:tree (:home "Lisp/"))
(:tree "~/quicklisp/dists/")

最初の /usr/share/common-lisp/source は ubuntu における common-lisp ライブラリの標準のインストール場所。以後 apt などで install されたライブラリがここで参照できる。

そしてこれまた人まねで quicklisp の初期化は .clisprc からコメントアウトした。(sbcl 使えって?)、これでうまくいくはず。いままでいい加減に load とかやってたのを ubuntu の世界でうまく整理できた。

cygwin もやってみた。asdf を make して build に asdf.lisp が出来るところまでやったが、(require "cl-fad") (公式ドキュメントによると "cl-fad" と文字列でやるのが互換性のある記述らしい。'cl-fad は GNU lisp で動くが互換性はないとのこと)、とすると alexandria がこける。どうも LANGの設定が絡んでいるようだが、なにが悪いのかは特定できなかった。cygwinclisp がだめなのかも。