#:g1: ABCL/1 ABCL/R2をビルドする

Posted 2010-07-26 14:30:00 GMT

今回のABCLは、JVM上で動くCL処理系ではなくて、LISPベースの並列オブジェクト指向言語の方です。
今日、deliciousから流れてくるLISP関係のものを眺めていて、
-ABCL implementations list
というのをみつけました。
中に配布されているソースが書かれているのですが、もしかしてと思って、上のディレクトリを覗いてみると、abcl/1や、abcl/r2のソースがありました!
abcl/fはソースが配布されているのを見たことがあったのですが、abcl/1やabcl/rは配布されていることを知りませんでした。
物は試しということで、早速、ビルドに挑戦。
Makefileもあるのですが、手直ししないと動かないようなので、ターゲットの一つであるKCLの直系のGCLを起動して、処理系からビルド用のファイルを読み込むことにしてみました。
といっても非常に簡単です。(環境は、Ubuntu 10.4 x86_64で試しました。)

abcl/r2の場合

$ mkdir abclr2
$ cd abclr2
$ wget http://venus.is.s.u-tokyo.ac.jp/pub/abclr2/abclr2-dist.tar.Z
$ gzcat abclr2-dist.tar.Z|tar xvf -
$ gcl
GCL (GNU Common Lisp)  2.6.7 CLtL1    Feb 15 2010 17:57:54
Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL'ed components: (XGCL READLINE BFD UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL. Temporary directory for compiler files set to /tmp/

>(push :kcl *features*) ;KCLということにする

(:KCL :COMPILER :NUMLIB :SDEBUG :DEFPACKAGE :GNU-LD :XGCL :UNEXEC :BFD :NATIVE-RELOC :READLINE :TRUNCATE_USE_C :CLX-LITTLE-ENDIAN :BSD :GNU :LINUX :X86_64 :SGC :IEEE-FLOATING-POINT :UNIX :GMP :GCL :AKCL :COMMON :KCL)

(load "defabclr2.lsp")

Loading defabclr2.lsp Loading defsystem.lsp Finished loading defsystem.lsp Finished loading defabclr2.lsp T

>(build-and-dump) ;ビルドして実行可能ファイルを作成

Loading /home/mc/Desktop/abcl/abclr2/src/abclr2.system... ...

とすると、saved_abclr2というものができます。
これを実行すると
$ ./saved_abclr2 

Welcome to ABCL/R2 Gesi version (Jul. 7, 1995, 0.59)

ABCL/R2>[[object (script (=> [:hello] !(print "Hello, World!")))] <== [:hello]]

"Hello, World!" "Hello, World!" ABCL/R2>

abcl/r2が起動できます。

abcl/1のビルド

abcl/1もabcl/r2と同じようにできますが、途中でちょっとひっかかるので、そこは飛します。
>(push :kcl *features*)

(:KCL :COMPILER :NUMLIB :SDEBUG :DEFPACKAGE :GNU-LD :XGCL :UNEXEC :BFD :NATIVE-RELOC :READLINE :TRUNCATE_USE_C :CLX-LITTLE-ENDIAN :BSD :GNU :LINUX :X86_64 :SGC :IEEE-FLOATING-POINT :UNIX :GMP :GCL :AKCL :COMMON :KCL)

>(load "init-abcl")

Loading init-abcl.lsp ABCL-USER>> (load "maksys")

Loading maksys.lsp Finished loading maksys.lsp t ABCL-USER>> (load "defabcl")

Loading defabcl.lsp Finished loading defabcl.lsp t ABCL-USER>> (maksys 'abcl1) Loading file declare.o...... start address -T 0x10bbfe0 done. ABCL-USER>> (abcl::enable-debug) ABCL-USER>> (abcl::gbc-message-on) ABCL-USER>> ; (si:catch-bad-signals);飛ばす ABCL-USER>> (setq si:*indent-formatted-output* nil) ABCL-USER>> (defun system:top-level nil (abcl::abcl-top-level)) ABCL-USER>> (if abcl::*distribution* (setq si::*break-enable* nil)) ABCL-USER>> (gbc t) ABCL-USER>> (si:save-system "saved_abcl1")

まだ、マニュアルをちょっと眺めただけですが、abcl面白そうです!

comments powered by Disqus