Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-07-26

ABCL/1 ABCL/R2をビルドする

| 23:30 | ABCL/1 ABCL/R2をビルドする - わだばLisperになる を含むブックマーク はてなブックマーク - ABCL/1 ABCL/R2をビルドする - わだばLisperになる

今回のABCLは、JVM上で動くCL処理系ではなくて、LISPベースの並列オブジェクト指向言語の方です。

今日、deliciousから流れてくるLISP関係のものを眺めていて、

というのをみつけました。

中に配布されているソースが書かれているのですが、もしかしてと思って、上のディレクトリを覗いてみると、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面白そうです!