下記を実現するための手順書。
- roswell(lisp実行環境構築ツール)を導入する
- slimv(VimにおけるSLIME)を導入する
- roswellとslimvでcommon lispをコーディング、実行するための設定をする
下記の順番に環境構築する。
- roswellを導入する
- slimvを導入する
roswellとは、Common Lispの実行環境を構築するためのユーティリティ。 内部ではquicklispを使っており、そのquicklispの内部ではASDFを使っている。 これらは混同されがちなので、下記にこれらについて他サイト様の説明を引用しながら軽く説明する。
すでに使うべきではない機能であり、大体のプロジェクトではASDFを使用している。
ANSI Common Lispに存在するライブラリ管理システムです。
(require :hoge)
でファイルを読み込み、そのファイルで(provide :hoge)
されていれば、2回目以降の(require :hoge)
では何も行われません。これは無駄なロードを防ぐための仕組みです。
しかし、REQUIREがどこのファイルを読みにいくかは処理系の実装に依存しています。
処理系ポータブルなコードを書くには非常に不便です。
ASDFは、Common Lispのソースコードをsystemとしてまとめ、ビルドし、ロードするための「モジュール管理プログラム」。
ASDFは,ローカルに存在するライブラリを,依存関係に基づいてロードします.
実際には,ロードする前にコンパイルまで行ってくれます.
依存関係を定義するファイルは.asdファイルで,通常プロジェクトトップに置かれます.Lisp標準のrequire関数で外部ファイルをロードする際,ほとんどの処理系がASDFを用いてファイルをロードするため,ASDF自体はLisp標準規格に含まれませんが,処理系と共に予めインストールされていることが多いです.
Quicklispは依存しているライブラリをウェブ上のリポジトリからダウンロード・インストールしてくれるツール。
Roswellは何かと言うと,Quicklispのようなインストーラです.
Quicklispとの違いは,ライブラリだけでなくLisp処理系のインストールもできる点です.
RoswellでインストールされたLisp処理系を使うと,Roswellでインストールしたライブラリを何の設定もなしにrequireでロードできます.
したがって,RoswellさえあればQuicklispは必要ありません.
また,Roswellでインストールした処理系とライブラリは,単一のディレクトリ以下に配置されるので,既存の開発環境と共存できます.
ただし、RoswellをインストールしたらQuicklispもインストールされるため、不要と言うのは少し違う。
RoswellがQuicklispを隠蔽する感じだと思う。
上記の説明の引用先を下記に示す。
- Common Lispのライブラリ事情
- Lispのパッケージ管理入門.Quicklisp,ASDF,Roswellの違いなど
- require, ASDF, quicklispを正しく使う
- 独学Common Lisp 第24章「システムの構築(ASDF)」
Common Lispとリアル・ワールドを繋ぐ「Roswell」の紹介に導入手順の分かりやすい説明がある。
基本的にはroswellのgitwikiを参照しながら導入できる。 これによると、Macの場合はHomebrewを使用すれば簡単に導入できる。 roswellをインストールすると、バイナリ版SBCLとQuicklispがインストールされる。
$ brew install roswell
# ターミナルを開き直す
$ ros setup
$ ls -a ~/.roswell
. archives env impls lisp src
.. config helper.el lib local-projects tmp
roswellでインストールしたlisp実行環境を確認するには下記コマンドを実行。
$ ros list installed
Installed implementations:
Installed versions of clisp:
clisp/2.49
Installed versions of sbcl-bin:
sbcl-bin/1.4.4
インストールされた処理系、バージョンは切替ができ、rosで起動されるCommon Lispを変更できる。
# デフォルトで使用する処理系を確認する(ハイフン--は誤記ではない)
$ ros run -- --version
SBCL 1.2.12
# デフォルトで使用する処理系を変更する
$ ros use sbcl/1.1.8
# デフォルトで使用する処理系が変更された
$ ros run -- --version
SBCL 1.1.8
slimvで使用するため、インストールする。
$ ros install slime
slimvは、lisp記述・実行を支援してくれるvimプラグイン。 チュートリアルがそこそこ整っているので、最初に一通り実施してショートカットなどを覚えた方が良い。
ここで、slimvの仕組み(イメージ)について把握したほうが良い。 slimvの仕組みは、(多分)下記のとおり。
ユーザ --> slimv --> swank --> roswell(lisp実行環境)
ユーザがファイルやインタプリタ画面に対して操作したら、それをslimvがswankサーバに送り、lisp実行環境で処理される、といった具合だと思う。
vimプラグインなので、インストール方法は色々あるが、ここではVundleを使用する。 Vundleの使い方は、また別の記事で説明する(多分)。
" これを.vimrcに記述して保存する
Plugin 'kovisoft/slimv'
" vimを開いて下記コマンドを実行してプラグインをインストールする
:VundleInstall
.vimrcを設定する。(macの場合なので、linuxなどの場合は適宜修正が必要。)
自分の場合はプラグインごとに設定ファイルを分けているので、その設定ファイル08slimv.vim
を別に示す。
また、タグファイルの格納場所として、$HOME
直下に.tags
ディレクトリを作成する。
補足
brew などでインストールした素のclispを使用する場合は、(多分)slimv_swank_cmd
を設定する必要はない。
roswellを使用する場合はswankサーバをroswellのものにするため、slimv_swank_cmd
の設定が必要となる。