サイトジェネレーションは次の手順で行って下さい。
FTPでソースを入手した場合、Sun 3/SPARCstationでは次のように行います。
% mkdir hcl % cd hcl % zcat HCL_V1.6.tar.Z | tar -xvf -テープにて配布された場合はtarの入力ソースをSUNでは/dev/rst8, Sony NEWSでは /dev/rtu00, OMRON LUNAでは /dev/rst0 としてください。
ソースに問題がなければ30〜2時間でbin/hcl(HCl 核)及びbin/hcl.savが できあがります。
% cd bin % ./hcl HCL Version 1.6, Release 2.0 (Last change: July 20, 1991) [April 29, 1991,The Green-Day version] (C) Tsuyoshi Yamamoto, Hokkaido University. Starting Lisp Listener [USER] [1]->となりhclが起動します。
% setenv HCL_IMAGE ~/bin/hcl.savを行うことが勧められます。別の方法としてaliasによって コマンド名lispを特定のhcl及びhcl.savに結合する方法も考えられます。\\ 例えば
% alias lisp /usr/local/bin/hcl -e /usr/local/bin/hcl.savはlispというコマンド名をhcl,hcl.savに結合します(*) この定義を.cshrcにいれておくことによりどのデイレクトリにいてもHCl を イニシャライズ付きで開始できるようになります。
(cd fasl; loadhcl -m 2000 -s 64)これはheap領域を2000KB、stackを64KB割り当てます。heap領域には コンパイルされた関数の実体以外の全lisp objectが格納されます。 ここでstackとはhclが内部で使用するdata stackを 指します。現在の版のHClでは他に program stack, lexical environment stack(*) , dynamic environment stackがあります。 このうち、lexical environment stack, dynamic environment stackには data stackの$1/4$の大きさが割り当てられます。Program stackはOSが 動的に与えるので制限はUnixの制限と同じになります。
現在のHCl では構造上、これらのサイズを実行中に動的に変更することは 出来ません。従ってアプリケーションが極めて大量のstack,heapを要求する場合 は予め大きめのhcl.savを作成しておく必要があります。System VのUnixでは heapを実記憶以上に割り当てることが出来ない場合があります。その場合、 loadhclはHeap allocation error.で異常終了します。 この場合は-mの引数を小さくして試みて下さい。-mは最低1000でも 動作します。
% cd fasl % makeMakefileはfasl/*.faslを消去し、すべてのlispレベル定義関数を最初から 再コンパイルします。このブートストラッププロセスは機種にかなり依存しま すが、最大3時間位かかることを覚悟してください。 HCl 核に含まれるソースファイル(hcl/lsp/*.lsp) を一本毎に再コンパイルして再ロードすることも可能です。 その場合はhcl/faslにおいてHCl を立ち上げ、
% cd hcl/fasl %../bin/hcl -e ../bin/hcl.sav HCL Version 1.6, Release 2.0(Last change: July 20, 1991) [April 29, 1991,The Green-Day version] (C) Tsuyoshi Yamamoto, Hokkaido University. [1]-> (compile-file "../lsp/xxxx.lsp" :output-file "xxxx.fasl") ;; Compiling ../lsp/xxxx.lspを実行します。その結果、*.faslが更新されます。その後、HCl を終了し、 loadhclを実行して新しいhcl.savを作って下さい。コンパイル後HCl を終了せず にloadすると古い関数定義のコードが残っているためHCl のサイズが少し大きく なります。
% hcl HCL Version 1.6, Release 2.0(Last change: July 20, 1991) [April 29, 1991,The Green-Day version] (C) Tsuyoshi Yamamoto, Hokkaido University. Starting Lisp Listener [USER] [1]->(load "....") ;;loading programs t [2]->(in-package 'foo) t [3]FOO->(system:freeze "foo.sav") ;; saving snapshot t [4]FOO->^D See ya bye... % hcl -e foo.sav ;; starting with foo.sav HCL Version 1.6, Release 2.0(Last change: July 20, 1991) [April 29, 1991,The Green-Day version] (C) Tsuyoshi Yamamoto, Hokkaido University. Starting Lisp Listener [USER] [1]FOO-> ;; Restart from freezed point.*.savファイルはHCl の動的環境全てを含みますから一般に大きくなります。 HCl 単体ではMC68030で1.5MB程度ですがCLXを含んだ場合には3MB、 reduce3.3では4MBぐらいになります。 *.savファイルはフリースペースやスタックを含みません から、大きなheapやスタックを宣言してもそのサイズが大きくなるわけでは ありません。 system:freezeはoptional引数 としてホットスタート直後に実行するformを指定できます。
[2]->(load "foo") Loading foo.fasl, completed. t [3]->(system:freeze "foo.sav" '(begin)) tとすればfoo.savをロード後、(begin)を評価し、その後トップレベルループに 入ります。 freezeによって作られる*.savファイルはhclとペアですから、後で HCl をmakeなどによって作り直した場合に一般に以前に作られた*.savファイルは 使えなくなります。その場合は新しいHCl の上で再度loadを行って*.savを作り直して 下さい。loadhclによって作成される標準のHCl はイニシャライズ関数 として(system::init-function)を定義してあります。 これは~/.hclrcが存在すればそれをスタート時にloadによって 読み込み、各ユーザ毎に内部パラメータをカストマイズするために用いることを 想定しています。対応するファイルが存在しなければ何もしません。 例えば、ほとんどEmacsで仕事をする方ならば
(system::emacs-mode t) (proclaim '(optimize (speed 3))) ;; ;; End of initialization ;;という内容を~/.hclrcに入れておけばいつもEmacsモードでHCl を立ち上げる ことが出来ます。