pi [file] [arguments]
引数なしで起動した場合、pi は通常の read-eval-print ループを実行する。
式 (exit) を評価することで終了する。
起動時に引数を与えた場合、第一引数をファイル名として解釈し、read-eval-print
ループの実行に先だってそのファイルをロードする。第二引数以降は
アプリケーションにパラメータを与えるために利用できる。プログラムから
コマンドラインの引数を知るには大域変数 *invocation-arg*
または手続き rp:command-line-arguments を使用する。
*invocation-arg* 大域変数
(rp:command-line-arguments) 手続き
例
$ cat arg.scm
(display "*invocation-arg* is ")
(write *invocation-arg*)
(newline)
(display "rp:command-line-arguments returns ")
(write (rp:command-line-arguments))
(newline)
(exit)
$ pi arg.scm foo bar baz
*invocation-arg* is ("arg.scm" "foo" "bar" "baz")
rp:command-line-arguments returns #("pi" "arg.scm" "foo" "bar" "baz")
$ pisc arg.scm
$ pisl arg
gcc -O2 -m486 -I/u/qfwfq/lib/rhizome -c arg.c
gcc -O2 -m486 -I/u/qfwfq/lib/rhizome -c a.c
gcc -L/u/qfwfq/lib/rhizome a.o arg.o -lrhzscm -lrhzpi -lrhizome -lm
$ ./a.out foo bar baz
*invocation-arg* is ("./a.out" "foo" "bar" "baz")
rp:command-line-arguments returns #("./a.out" "foo" "bar" "baz")
pisc -help
pisc [options] file
file をC言語のプログラムに変換する。
オプション:
-module module-identifier
module-identifier とする。
モジュール名は pisl で実行ファイルを生成する時に指定する名前である。
これはC言語の識別子として正当なものでなければならない。
デフォルトではソースファイルの名前から末尾の ".scm" を
(もしあれば)除いたものとなる。
-output filename
-mpath dir
dir を rp:use-macro-package
のサーチパスに加える。このオプションは複数指定できる。
-load filename
pisl -help
pisl [options] module-specifier ...
module-specifier で指定されるモジュールを
結合して実行ファイルを生成する。
オプション:
-cc cc-command-line
pisl -help の出力で知ることができる。
-ld ld-command-line
pisl -help
の出力で知ることができる。
-nold
-nolib
pisl -help の出力で知る
ことができる。
-loadable
rp:load-compiled-module手続きによりロードする。
このオプションはWin32では使用できない。
-o filename
-s filename
-xm module
module で指定された標準モジュールを
実行ファイルから除く。module は次のうちのどれか。
expand |
syntax-case によるhygienicマクロ機能。これが除かれると 一部の構文の振る舞いがわずかに変化するが、その変化は 普通のプログラムに影響を及ぼすようなものではない。 | |
stdmacro |
標準のマクロ。rhizome/pi では define, lambda など 基本的な構文キーワードもマクロなのでこれが除かれると 使用できなくなる。アプリケーションが実行時に任意の 式を評価する機能を持たないならこれを除いても安全 である。 | |
debugger |
デバッグ機能。 | |
stdproc |
組み込み手続きのうち rhizome/pi において scheme で
記述されているもの。これを除いた場合何が使用できなく
なるかはソースを参照のこと :-)
これを除くと expand と debugger
も自動的に除かれる。 |
|
extcall |
共有オブジェクト内の関数へのインターフェースを提供するマクロ。 アプリケーションの実行時に新たに外部手続き、コールバック、 バッファ構造、定数を定義する必要がなければ これを除いても安全である。 | |
saccess |
extcallに含まれるマクロによって定義されたマクロを
展開するときに使用される手続き。expandが除かれると
saccessも自動的に除かれる。またsaccess
が除かれるとextcallが自動的に除かれる。 |
-aux string
string をリンカのコマンドラインに追加する。
すでにオブジェクトファイルになっているモジュールを指定する目的に使用
できる。module-specifier の指定方法
module-specifier には pisc の -module
オプションで指定した名前を指定する。
そのモジュールが含まれるファイルがモジュール名に ".c" を追加した名前で
ない場合、ファイル名を ':' のあとに指定する。また、ファイルが既に
オブジェクトファイルになっている場合は ':' のあとを空文字列にし、
オブジェクトファイルの名前を -aux オプションを使用して指定する。
例
ソースファイル x.scm, y.scm, z-0.scm をコンパイルして実行ファイルを
作成するとする。以下はコンパイルの手順の一例である。
pisc x.scm # x.c を生成 pisl -nold x # x.o を生成 pisc y.scm # y.c を生成 pisc -module zz -output z-0.c z-0.scm # z-0.c を生成、モジュール名は zz pisl -aux x.o x: y zz:z-0.c # 実行ファイルを生成生成された実行ファイルを起動すると各ソースファイルをインタプリタ上で pisl に与えたモジュール指定の順にロードした場合と同様の動作をする。 上の例では、a.scm の内容が
(load "x.scm") (load "y.scm") (load "z-0.scm")であったとして
pi a.scm [arguments]とした場合と同様の動作となる。
(exit)
するようになっていれば、生成されるものは非対話的なプログラムになる。また、
一連の手続きの定義のみを含むプログラムをコンパイルすれば生成されるものは
その手続きがあらかじめ定義された scheme インタプリタとなる。ただしこの
場合起動時の第一引数をロードするといった pi と同じ動作を望むなら、その
動作をプログラムに記述しなければならない(pi/interprt/pi.pi をリンクすれば
よい。pi 自身は "pisc -module pi pi.pi; pisl -o pi pi"
として作成できる。)