roswell + cl-project + rove
Common Lisproswell
2023-4-4 18:11 JST

色んな所の情報をみてもスッキリ出来なかったので、自分で情報を書くよ。これを見れば roswell つかって cl-project つかって rove でテスト、、、まで出来るはず。

roswell

roswell はインストール済みとするよ。で sbcl-bin も roswell でインストール済みとするよ。

どんなシステム使っているのかよくわからなくなるよ。そんなときは ros configで確認できます。

$ ros config
clasp.version=2.1.0
clasp-bin.version=2021-05-26
clisp.version=2.49
sigsegv.version=2.11
ffcall.version=ffcall-1-10
setup.time=3885633322
sbcl-bin.version=2.2.3
default.lisp=sbcl-bin

Possible subcommands:
set
show

たぶん sbcl でしょう。一択です。

cl-project

プロジェクトの雛形を作るには cl-project で作ります。といっても cargo みたいに便利なツールがあるわけではなくros から呼びます。

$ ros run
* (ql:quickload :cl-project)
* (cl-project:make-project #P"./simd-pe" :author "Ryos Suzuki")

好みによるのですが、src の下に main.lisp が出来るので、これを package.lisp に変えました。後、 README.org を削除し、README.markdown を README.md に変更。

cl-emb

cl-emb はどうやらメンテナーがどっかのタイミングで変わったのですがそのまま github に2つある。ros で install すれば問題ないのですが、たまたま自分の場合 ~/common-lisp に古い cl-emb を clone していて混乱しました。

ROS スクリプト

この時点では雛形が出来ただけなので何も出来ません。そこで ros で script を作ります。

$ mkdir script
$ cd script
$ ros init simple-test

これで simple-test.ros が出来ますが、パスを教えていないのでパッケージを探せません。

パッケージを探せ!

quicklisp は ASDF に依存している(らしい)。~/.config/common-lisp/source-registry.conf.d/にその設定を書いてある。私の場合 00-debug.conf というのを作っている。

$ cat ~/.config/common-lisp/source-registry.conf.d/00-debug.conf
(:tree (:home "Lisp/Debug/"))

ほかの blog にあるように~/.roswell/local-projects/ にシンボリック・リンクを貼ったりros スクリプトを書き換えてもいいのだが、よくよく考えたらデバッグ中は ~/Lisp/Debug にシンボリック・リンク、デバッグが終わったら ~/Lisp に移動とするように自分でルールを決めていたのでそれに従うことにした。

スクリプトのテスト

src に simd-pe.lisp を追加してテスト用関数を作る。package.lisp で export して、ros スクリプトから呼ぶようにする。

package.lisp
(defpackage simd-pe
  (:use :cl)
  (:export

    #:my-test
  ))
(in-package :simd-pe)
simd-pe.lisp
(in-package :simd-pe)

(defun my-test ()
    (print `(:test test)))
simple-test.ros
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 "$@"
|#
(progn ;;init forms
  (ros:ensure-asdf)
  #+quicklisp(ql:quickload '("simd-pe") :silent t)
  )

(defpackage :ros.script.simple-test.3889585114
  (:use :cl))
(in-package :ros.script.simple-test.3889585114)

(defun main (&rest argv)
  (declare (ignorable argv))
  (simd-pe:my-test)
  ;(rove:run-test 'test-all)
  ;(simd-pe/tests:my-test-one)
  )
;;; vim: set ft=lisp lisp:

これで ros スクリプトが走るはず。はい。おめでとう。ちゃんと実行できました。

$ ./simple-test.ros

(:TEST SIMD-PE::TEST)

rove のテスト

cl-project にしても rove にしても情報が少なく過ぎて使い方に確信を持てない。まず rove のインストール。ros で install。
すると ~/.roswell/bin に rove がインストールされる。

$ ros install rove
$ ls ~/.roswell/bin/rove
/home/ryos/.roswell/bin/rove

実行にはどうやら asd ファイルを指定するみたい。

$  ~/.roswell/bin/rove simd-pe.asd

Testing System simd-pe/tests

;; testing 'simd-pe/tests/main'
test-all
  should (= 1 1) to be true
    ✓ Expect (= 1 1) to be true.

✓ 1 test completed

Summary:
  All 1 test passed.

初期設定のままなので (= 1 1) を評価して ok とかしている。後、実際には文字に緑の色がつく。なんだろうな reporter って。謎。

とりあえずこれで初期設定は出来た。

リンク集