Common lisp の言語実装の一つの Clasp をビルドした。roswell からの install は苦労した。
Building Clasp
Building Claspというそのまんまのウェブページがある。ので、そのままいけばすぐにインストールできる、、、はず。ひっかかったのは fmt。私の環境 Ubuntu 20.04.5 LTS では古い libfmt-dev だったのでfmtlib/fmtから clone してコンパイルしてインストールした。
Ninja Build
ビルドするのに Ninja を使うが、その前に、koga というプログラムを走らせる。Clasp についてくるプログラムなのでそのまま実行すればよい。きっと甲賀から連想したに違いない。その後、ninja -C buildとしてsudo ninja -C build installで、/usr/local にインストールされる。
roswell
roswell からのインストールにはClaspをビルドする2020-05が詳しい。が、どうも LLVM のウェブサイトが移動してしまい、それに私のroswell が追従していないのでエラーになるみたい。
roswell install clasp-bin
roswell は最新にしても clasp の install は出来なかった。github のソースを見ると 2019 あたりで更新が止まっている。ただし、clasp-bin というのがあるみたいなのでインストールしてみた。
autoconf
コンパイルに先立ち最新の autoconf が必要になった。まずココからかよ。autoconfから clone してくるも、コンパイル出来ない。Building autotools from gitを参考にしてみる。
$ git clean -f -X
$ aclocal -I m4
$ automake --add-missing
$ autoconf
$ configuire
$ make
あら不思議コンパイルできちゃった。
libffi.so.8
libffiから clone して autogeh.sh を走らせる。その後、多分 configuire そして make したのだと思う。/usr/local に install した。
llvm-13
なぜ、ubuntu には llvm-13 がない?セキュリティ問題の気もするのでちょっと調べるが見つからず。ということで、気にせず、liborg-13.0.1 の tar.gz (つまりソース)をダウンロードして、コンパイル。
$ mkdir build
$ cd build
$ cmake -G Ninja ..
しかし、so 出来ず。「LLVM/Clang 14をビルドする」を参考に -DBUILD_SHARED_LIBS=Onも追加してコンパイル。あれ?so は出来たけど、肝心の libLLVM-14.so が出来ない。
$ cmake -DLLVM_LINK_LLVM_DYLIB=On -G Ninja ..
結局 LLVM_LINK_LLVM_DYLIB を On にする必要があるみたいだ。途中 BUILD_SHARED_LIBS も On したので明示的に off にしてもだめだったので、build を空にして再挑戦。lib/libLLVM-13.soができた。
sudo ninja installでインストール。ninja に uninstall がないのが気になる。
GLIBC_2.32
結局、GLIBC がないのなんのといわれて、実行できず。
roswell install clasp-bin/2021-05-26
よく見ると、list でインストール可能な version を表示できる。
$ ros list versions clasp-bin
Installable versions for clasp-bin:
Checking version to install...
2022-01-28
2021-05-26
2021-04-13a
2021-04-13
2021-03-26
ということで、最新より一つ前の 2021-05-26 をまずは wget でdownload して単体で実行してみる。どういうわけか clasp は存在せずiclasp-boehm という実行可能オブジェクトがある。
$ clasp-2021-05-26-x86-64-linux/build/boehm/iclasp-boehm
Starting cclasp-boehm-0.4.2-3888-g0995ef76f-cst ... loading image...
Top level in:
COMMON-LISP-USER>
(quit) はない。実行するとエラーになるので、:r1 とかタイプして抜ける。最終的には Ctrl-D で終了。とりあえず動くみたいなので ros で install
$ ros use clasp
clasp/system does not exist.stop.
Error: unable to use 'clasp'
$ ros list installed
Installed implementations:
Installed versions of clasp-bin:
clasp-bin/2021-05-26
Installed versions of clisp:
clisp/2.49
Installed versions of sbcl-bin:
sbcl-bin/2.2.3
$ ros use clasp-bin/2021-05-26
$ ros run --version
roswell 22.12.14.113(4eec08c)
$ ros run -- --version
clasp-boehm-0.4.2-3888-g0995ef76f
$ ros run
Starting cclasp-boehm-0.4.2-3888-g0995ef76f-cst ... loading image...
; caught STYLE-WARNING:
; Undefined function ROS-OPTS
; at unknown location
;
;
; compilation unit finished
; caught 1 STYLE-WARNING condition
; caught STYLE-WARNING:
; STYLE-WARNING during compiler-macro-expansion:
; Undefined type COMPILER-NOTE
; at /home/ryos/.roswell/lisp/quicklisp/quicklisp/impl-util.lisp 20:18
;
;;; Warning: Lisp compilation had style-warnings while
compiling
;
; compilation unit finished
; caught 1 STYLE-WARNING condition
Top level in:
COMMON-LISP-USER>
ros use claspじゃエラーになる。ros list installedで一覧を見れる。ros use clasp-bin/2021-05-26正確にバージョンを入れると use 出来るようになる。ros run --versionでは ros のバージョンが表示される。ros run -- --versionでは clasp のバージョンが表示される。ros runで clasp が立ち上がった。(quit) はないのでCtrl-D で抜ける。
COMMON-LISP-USER> (quit)
; caught STYLE-WARNING:
; Undefined function QUIT
; at unknown location
;
;
; compilation unit finished
; caught 1 STYLE-WARNING condition
Condition of type: UNDEFINED-FUNCTION
The function QUIT is undefined.
Available restarts:
(use :r1 to invoke restart 1, etc.)
1. (RESTART-TOPLEVEL) Go back to Top-Level REPL.
CORE:REPL
COMMON-LISP-USER>> :r1
COMMON-LISP-USER>
他の ros に影響が出る
clasp 遅いよ(sbcl に比べて)。そもそもの起動が遅いみたい。そして、use で変えたら他の ros 実行ファイルに影響が出た。当たり前?
[1/1] ../bin/web-factory.ros site.props
Starting cclasp-boehm-0.4.2-3888-g0995ef76f-cst ... loading image...
; caught STYLE-WARNING:
; Undefined function ROS-OPTS
; at unknown location
;
;
; compilation unit finished
; caught 1 STYLE-WARNING condition
Condition of type: PACKAGE-DOES-NOT-EXIST
Package named "SB-EXT" does not exist.
No restarts available.
Top level in:
COMMON-LISP-USER>
SB-EXT と sbcl に依存したところがあったみたい。とりあえず、ros ファイルの先頭で sbcl-bin を指定するようにする。
exec ros -Q -L sbcl-bin -- $0 "$@"
リンク集
Clasp の本家の github 。v2.1 も出てちゃくちゃくと 開発は進んでいるみたい。
こちらは Common LISP as simulation program (CLASP) for electronic circuits. というもの。 回路図がかけてシミュレーションできる?あとで調べようっと。 ただし9年前に開発が止まっている。
Common LISP as simulation program (CLASP) の論文。2011 年みたいだから cl-clasp より早い。
うちも cl-clasp という HTML 作成パッケージを作っていて、 名称がかぶっている。 public な開発開始が 2012 Apr 9th になっているから よし! clasp より早いぞ。
この映像が Clasp の説明としてはわかりやすかったかな。 ただし 2018 年なんだよね。
これも Google TechTalks の資料。
lisp の上で動く lisp コンパイラ。(だと思う)
Common Lisp 用のコンパイラ。AST を出力する。backend はない。
Christian A Schafmeister という人と Alex Wood という人が いろいろ論文を書いている。
Common Lisp 用の描画エンジン。コンパイラとは関係ない。
Rust は GC を持たないという話。コンパイラとは直接関係ない。
libresect という Common Lisp から C/C++ を呼ぶ仕組み(だと思う)。 コンパイラとは関係ないけど、途中でインストール。 Clasp のチームが claw-usb を使ってたから。関連はありそう。
Common Lisp から LLVM 使えるといいなぁ〜。(まだ使ってない)
Common Lisp で 3D!! そして IDE。slime で接続しないといけないのに 気がつくのにかなりかかった。
slime の client ととして使った。いいね。
2023-2-15 16:35 JST