windowsでroswellする。

yoshitiaです。

なんかもう年の瀬ですね。

 

小ネタにcommon lispのroswellをwindowsでセットアップしたときの話を。

 2019/5/7 設定ファイル回りの話を修正

roswellって何よ

github.com

common lispっていくつも処理系(スクリプト実行とかコンパイルしてくれるやつ)

がありまして、時々顔を出す処理系ごとの差分がつらいんだとか。

そのあたりの差分を気にせずに使うためのもの。

quicklisp等の便利なツールの設定もやってくれるっぽい

 

windowsでのインストール

windows7とwindows10で確認した。

roswellのページにwindows用のバイナリのリンクがあるので

32bitか64bitか選んでダウンロード、パスを通す

次にコマンドプロンプトからコマンドを実行する

ros setup

 これで最低限の設定ができる。

デフォルトの処理系はsbclと呼ばれるものがセットされる

 

エラーが出た場合

大抵はros setupで終わるはずですがエラーが出てしまう事も。

common lispはエラー吐くときはちょっとしたものでも

エライ量出るので一旦テキストファイルに吐き出して対処する

ros setup > err.txt 2>&1

よくわからない場合は

標準出力 標準エラー出力 リダイレクトでググれば幸せになれます。

 

2019/5/7 roswellを使う際の設定は

~/.roswell/init.lisp

に記述する。


;; asdfの設定
(setf asdf:*central-registry*
      '(*default-pathname-defaults*))
;; local-projectsにインストールしたものをql:quickloadで使えるようにする設定
(push (pathname "~/.roswell/local-projects/")
      ql:*local-project-directories*)

日本語対応(sbcl前提)

homeに.sbclrc置いてもrosで起動する時はロードしてくれないっぽいので

ros -L sbcl-bin +R -l ~/.sbclrc

 と書いてから後ろにrunや実行ファイル名やらを書く。

毎回これ書くのはやってられないのでbatファイルを作る。

@echo off
@rem ros.bat - roswell起動用batファイル

call C:\roswell\ros.exe -L sbcl-bin +R -l ~/.sbclrc %*

これをbatファイルに実行すると.sbclrcの設定を読み込んで実行してくれる。

.sbclrcの中身はこれを参照。

it-memorandum.seesaa.net

問題としては使用する処理系の種類がbatファイルに書いたもの固定になってしまうのでroswellの利点、気軽に処理系切り替えができなくなる。

今のところ他にやり方がわからないのでこれでやってみる。

いっそroswell使うときは日本語扱わないほうが面倒減るかも。

使い方

common lispではスクリプトファイルを作るとき、

処理系ごとに書き方やコマンドオプションが異なることがありまして。

渡したい相手の処理系に合わせて書く、見たいな事が起きたり起きなかったり。

roswellを使うと

ros init hello

これでhello.rosファイルができる。

できたファイルに実行したい処理を追加で書き込めばスクリプトファイルが作れる。

処理系の差分はroswellが吸収してくれるので気にしなくていい。

Unix系OSならrosファイル単体で実行できるように書かれているのですが

windowsではその部分が動かないので

ros hello.ros

のようにしてスクリプトを実行します。

 

実行ファイル作成

common lispの処理系はスクリプトコンパイルしてexeファイルを生成できます。

実行ファイルの作成方法は処理系ごとに(ry

roswellの場合は

row build hello.ros

 でexeファイルを作成できます。

 

REPL

 lisp系言語だと当たり前の様についてくるアイツです。

roswellだと

ros run

 で現在セットしている処理系のREPLが起動します。

 

処理系の追加

ros install

これで追加可能な処理系一覧を確認可能です。

ros install clisp

のように指定してインストールします。

ros use clisp

使用する処理系を変更するときはros useです。

2019/11/21 追記

インストールしたライブラリ等が上手く動かない場合

ros update <ライブラリ名>

quicklispで追加したものならreplで

(ql:update-all-dists)

参考

takoeight0821.hatenablog.jp